我正在努力将函数理解为值,并在Javascript中理解闭包。
考虑代码;
function multiplier(factor) {
return function (number) {return number * factor; }
}
var i = multiplier(10);
此时我实际上持有什么?我知道我可以通过做
这样的事情来使用我console.log(i(5));
会产生50的值。但我还是想知道在此之前Javascript实际给了什么。
答案 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
消失了