JavaScript闭包场景下返回函数的参数值来源是什么?
解惑闭包示例中number参数的来源
嘿,我来帮你把这个点掰明白!首先咱们先把你提到的代码再贴一遍,方便对照看:
function multiplier(factor){ console.log('factor:'+factor); return function(number){ console.log('number:'+number) return number * factor; }; } var twice = multiplier(2); console.log('twice:'+twice(5));
你疑惑的number参数的值其实就是你调用返回的那个函数时传进去的参数,和闭包本身的“记住外层变量”特性是两回事,咱们一步步拆解执行流程就清楚了:
第一步:执行
var twice = multiplier(2);
这里调用了multiplier函数,传入参数2,所以函数里的factor就是2,先打印factor:2。然后multiplier返回了一个匿名函数(就是那个带number参数的函数),此时twice变量就指向了这个匿名函数。第二步:执行
console.log('twice:'+twice(5));
这里调用了twice,也就是调用刚才返回的那个匿名函数,并且传入了参数5——这个5就是给number参数的赋值!所以函数里的number就是5,先打印number:5,然后用5乘以闭包保存的factor(也就是之前的2),得到10,最后打印twice:10。
简单说,闭包负责让返回的函数记住外层的factor,而number就是你调用这个返回函数时正常传入的参数,就像你调用任何普通函数传参一样~
内容的提问来源于stack exchange,提问作者3lm 3lm
相关产品推荐
相关产品推荐

