我对封闭表现的范围感到困惑。 我不明白为什么输出只有40。
function multiply(input) {
var no = 5;
function multiply2(mul) {
mul *= input;
return no * mul;
}
return multiply2;
}
var total = multiply(4);
var result = total(2);
console.log("result :",result);
输出
结果:40
答案 0 :(得分:1)
multiply(4)
返回一个函数multiply2
,其范围内有两个自由变量:no
,其值为5
,而input
的值为{ {1}}。此行将返回的函数分配给4
:
total
var total = multiply(4);
调用该函数,为参数total(2)
传入2
。该函数的定义是两个语句,但它可以简化为一个语句(因为mul
是一个局部变量,并且在修改后从不使用,可以安全地删除副作用):{{1} }。传递了mul
,其值为return no*mul*input;
; mul
和2
是在调用no
时创建的自由变量,我们知道它们的设置是什么,因此,在下面的语句中,结果变为input
,这是multiply(4)
。
5*2*4
答案 1 :(得分:0)
输出40是正确的。你的函数乘以4 * 2 = 8然后你乘以8 * 5 = 40.我想如果你没有得到你期望的是因为你乘以4 * 2并使mul = 8所以那么返回的是5 * 8
答案 2 :(得分:0)