Javascript充当值和闭包
我正在努力理解函数作为值,以及Javascript中的闭包 以《守则》为例Javascript充当值和闭包,javascript,Javascript,我正在努力理解函数作为值,以及Javascript中的闭包 以《守则》为例 function multiplier(factor) { return function (number) {return number * factor; } } var i = multiplier(10); 在这一点上我到底持有什么?我知道我可以利用我的下一步 console.log(i(5)); 这将产生50的价值。但在此之前,我还是想知道Javascript到底给了我什么。I实际上是一个全新的函
function multiplier(factor) {
return function (number) {return number * factor; }
}
var i = multiplier(10);
在这一点上我到底持有什么?我知道我可以利用我的下一步
console.log(i(5));
这将产生50的价值。但在此之前,我还是想知道Javascript到底给了我什么。
I
实际上是一个全新的函数:函数(number){returnnumber*10;}
所以如果你有j=乘数(10)实际上,i
不是j
,因为它们是两个不同的函数
还有一点需要注意的是,在i之后=乘数(10)代码>你不再有因子
作为参考或价值,因子
已经从你的i
var i = multiplier(10);
实际上是var i=function(number){returnnumber*10;}
然后调用console.log时(i(5))代码>
你在打电话吗
console.log(function(5){return 5* 10;})
考虑以下两个例子。第一个是你给的,第二个是我给的
在第一种情况下,可能会认为返回的函数是
function (number) {return number * 10; }
但事实并非如此,即使这样想很容易<代码>系数
保存为参数<代码>系数
的参考。因此,函数multiplier
返回一个函数,其中引用了您提供的值
如果因子的值改变,则函数结果不同
函数乘数(因子){
返回函数(数){返回数*因子;}
}
var i=乘数(10);
console.log('Example1',i(5))
函数乘法器2(系数){
setTimeout(()=>{factor=100},1000)
返回函数(数){返回数*因子;}
}
var i2=乘数2(10);
console.log('Example2',i2(5))
setTimeout(()=>{console.log('Example2',i2(5))},1100)
var i=function(number){return number*10;}
,这是乘数
函数返回的结果。如果您认为答案足够,请不要忘记接受答案,按照礼仪,10
是否实际上是因子
,它保存为创建它的范围中的引用?如果在执行函数之前因子参数会发生变化,则来自乘数(10)(5)
的答案不会是50。在i=乘数(10)之后
你不再有因子了。@Xin:那不是真的。您仍然有因子
,这就是函数工作的原因。Javascript函数定义不替换变量值。相反,它引用了它们。这个“特性”被称为词法闭包(简称闭包)。谢谢Xin,我知道这些语句调用的是一个新的“实例”。我感兴趣的是Javascript如何使用/计算函数变量?谢谢。那么Javascript是否给了变量i,一个“冻结”函数,可以说不是一个不变的值呢?是的,你是对的。每次调用“乘数”函数时,它都会被指定为不可变值。@Mamun这不是真的。看看我的答案。返回函数后,可以更改因子。“factor”仅在执行时计算。@E.Sundin Yes factor仅在创建时特定于实例。您已经第二次调用了该函数,在这种情况下,该实例将是一个全新的实例。