Javascript 封闭函数行为混淆
有人能解释一下为什么“number”参数没有作为未定义返回吗?我真的很难理解,如何将变量“两次”定义为一个固定值为2的函数作为其参数,然后将其用作一个具有可通过参数5的函数 将变量“两次”定义为固定值为2的函数 那不是你在那里做的<代码>两次只是指向Javascript 封闭函数行为混淆,javascript,Javascript,有人能解释一下为什么“number”参数没有作为未定义返回吗?我真的很难理解,如何将变量“两次”定义为一个固定值为2的函数作为其参数,然后将其用作一个具有可通过参数5的函数 将变量“两次”定义为固定值为2的函数 那不是你在那里做的两次只是指向乘法器中的函数(闭包)的指针(引用) 简短回答: 当你有var两次=乘数(2)与以下代码相同: 二次=函数(数){返回数*2}; 假设乘法器是一个类,它有一个属性factor(初始化对象需要),当初始化乘法器时,它返回一个函数,该函数接受number,并
乘法器中的函数(闭包
)的指针(引用
) 简短回答:
当你有var两次=乘数(2)代码>与以下代码相同:
二次=函数(数){返回数*2};
假设乘法器是一个类,它有一个属性factor
(初始化对象需要),当初始化乘法器时,它返回一个函数,该函数接受number
,并在您传递和修复factor参数的第一次调用中乘以factor:
function multiplier(factor) {
return function(number) {
return number * factor;
};
}
var twice = multiplier(2);
console.log(twice(5));
//output 10
该参数变为“固定”,因为乘数
返回的函数捕获了因子
变量值,然后乘数
函数返回后,对因子
的引用丢失,因此因子
将不再更改
(参见MDN上的)
两次
现在是这样一个函数:
var twice = multiplier(2);
在第二次调用中,您将使用tweeps
函数传递5作为数字参数。此行为被称为闭包,并以最简单的方式调用
闭包是一个持久的局部变量作用域,它允许您访问执行过程中已经传递的变量
在你们的例子中,因子是乘数函数的局部。但是你的内部函数捕获它并用它来计算乘法。在那个时候,因子变成了一个闭包,它不会从内存中删除。然后,当您使用5调用内部函数(返回)时,它使用捕获的变量值2获得值10。这里的因素是关闭
“douglas crockford's javascript the good parts”一书中对闭包进行了很好的解释,如果您想了解更多信息,..在哪一点返回为未定义的闭包?让我们用简单的C语言来解释:)不,您是对的。指针不是正确的术语。
function(number) {
return number * 2;
}