我在雄辩的javascript中看到了这个例子,并想知道这个函数是如何工作的。有人可以向我解释一下吗?
function multiplier (factor) {
return function(number){
return number * factor;
};
}
var twice = multiplier(2);
console.log((twice(5));
// 10
我能够遵循参数因子= 2 我混淆了两次(5)以及它如何成为参数编号。
答案 0 :(得分:1)
这是JavaScript中“封闭”的一个例子。
话说:
var twice = multiplier(2)
与说法完全相同:
var twice = function(number){
return number * 2;
};
因此,两次成为对函数的引用,该函数将返回两倍于您发送到它的值。
乘数函数返回function(number){...}
,它对因子有“闭包”(在本例中为2)。
这就是为什么当你致电twice(5)
时,你会得到10的结果。
您需要了解闭包:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
答案 1 :(得分:0)
也许这可以帮助您理解
function multiplier (factor) {
function inner(number){
return number * factor;
};
return inner;
}
var twice = multiplier(2);
console.log((twice(5));
您应该阅读有关匿名功能和范围的更多信息,我在这里找到了您的示例文章http://www.2ality.com/2011/02/javascript-variable-scoping-and-its.html
答案 2 :(得分:0)
乘数是一个接受因子作为输入的函数。
它返回一个函数。返回的函数接受一个数字作为输入,并返回该因子的数字。
稍微说一点,乘数创造的函数可以将一个数乘以某个因子。例如
>>> resolve_url("http://example.com/dir/../../thing/.")
'http://example.com/thing/'
调用multiplier(2)
将返回一个接受数字作为输入的函数,并返回该数字乘以2。
multiplier(2)
与
相同var twice = multiplier(2);
答案 3 :(得分:0)
你要理解的最重要的事实是乘数返回一个函数(一个闭包),它是一个创建函数的函数。返回的函数的工作方式与您自己定义的函数相同,参数由值替换。
function inner(number){
return number * 2;
};
两次将以与内部相同的方式工作,但使用5代替。(在示例中两次之前有一个额外的括号。)
在我看来,这是Javascript(范围链)最令人困惑的方面之一,因为它与其他语言的工作方式不同。但是如果你管理了几个简单的例子(比如你在这里发布的那个),从那时起就应该很容易阅读类似的代码。