【问题标题】:What are the brackets after a call to a Javascript function doing?调用 Javascript 函数后的括号是什么?
【发布时间】:2016-06-15 18:32:25
【问题描述】:

所以我在网上找到了这个脚本,除了两部分我都明白了:

1) var first = getUrlVars()["id"]; var second = getUrlVars()["page"];

我从未见过后面有括号的函数,它是什么意思/做什么?

2) 函数(m,key,value)

这些参数是从哪里来的(m, key, value)?

window.location 将是:http://papermashup.com/index.php?id=123&page=home

function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}

var first = getUrlVars()["id"];
var second = getUrlVars()["page"];

alert(first);
alert(second);

【问题讨论】:

  • getUrlVars() 返回一个数组或对象,[..] 表示对返回值的数组元素或属性的属性访问。
  • 1) 函数返回一个对象{id:1,page:2} 并且getUrlVars()["id"] 返回1(在本例中)。 2)阅读developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…,尤其是“将函数指定为参数”。非常有趣。

标签: javascript function parameters callback


【解决方案1】:

var first = getUrlVars()["id"];

这一行正在调用getUrlVars() 函数,然后访问返回对象的id 属性,然后将first 变量设置为该属性的值。

function(m,key,value) 是一个匿名函数,作为参数传递给String 对象上的replace 函数。 Docs here。本质上,它是将一个函数传递给replace 函数的这个参数:

要调用的函数以创建新的子字符串(代替从参数 #1 接收的子字符串)。提供给此函数的参数在下面的“将函数指定为参数”部分中进行了描述。

【讨论】:

  • 很好的答案!谢谢!
【解决方案2】:

1) 它基本上只是链接,您可以利用知道 getUrlVars 将返回一个对象,括号引用返回对象上的一个属性。

2) 非常相似的逻辑。 window.location.href 返回一个字符串,你链接 .replace() 方法。

function(m,key,value) 是你传递给replace() 的回调,它是一个标准的JS 方法,你可以在这里查看文档(带有参数描述):String.prototype.replace()

【讨论】:

    【解决方案3】:

    () 是一个方法调用

    该方法返回一个字典 对象(初始化为var vars = {})。使用vars["something"],您可以进行字典查找以从返回的对象中检索数据。

    您可以将 ypur 代码重写为 更快 的版本:

    var dict = getUrlVars(); // Build dictionary (method invocation)
    var first = dict["id"]; // Lookup
    var second = dict["page"]; // Lookup
    

    更短的代码既不会更快,也不会更易读。

    【讨论】:

      猜你喜欢
      • 2022-04-18
      • 2018-10-14
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2021-01-16
      相关资源
      最近更新 更多