Javascript用作值和闭包

时间:2017-03-20 03:45:15

标签: javascript

我正在努力将函数理解为值,并在Javascript中理解闭包。

考虑代码;

function multiplier(factor) {
    return function (number) {return number * factor; }
}
var i = multiplier(10);

此时我实际上持有什么?我知道我可以通过做

这样的事情来使用我
console.log(i(5)); 

会产生50的值。但我还是想知道在此之前Javascript实际给了什么。

3 个答案:

答案 0 :(得分:1)

考虑以下两个例子。你给的第一个和我提供的第二个。

在第一个可能认为返回的函数是

function (number) {return number * 10; }

但即使很容易想到这种情况,情况并非如此。 factor被保存为参数factor的引用。因此函数multiplier返回一个函数,其中引用了您提供的值。

如果factor的值发生变化,则函数结果会有所不同。

function multiplier(factor) {
    return function (number) {return number * factor; }
}
var i = multiplier(10);
console.log('Example1',i(5))

function multiplier2(factor) {
    setTimeout(() => {factor = 100}, 1000)
    return function (number) {return number * factor; }
}
var i2 = multiplier2(10);
console.log('Example2',i2(5))
setTimeout(() => {console.log('Example2',i2(5))}, 1100)

答案 1 :(得分:0)

var i = multiplier(10);

实际上是var i = function(number){return number * 10;}

然后致电console.log(i(5)); 你在打电话

console.log(function(5){return 5* 10;})

答案 2 :(得分:-1)

i实际上是一个全新的功能:function (number) {return number * 10; }

因此,如果j = multiplier(10);实际上i不是j,那么因为它们是2个不同的功能

还有一点需要注意的是,在i = multiplier(10);之后,您不再有factor作为参考或价值,factor已经从i消失了