Javascript 封闭函数行为混淆

Javascript 封闭函数行为混淆,javascript,Javascript,有人能解释一下为什么“number”参数没有作为未定义返回吗?我真的很难理解,如何将变量“两次”定义为一个固定值为2的函数作为其参数,然后将其用作一个具有可通过参数5的函数 将变量“两次”定义为固定值为2的函数 那不是你在那里做的两次只是指向乘法器中的函数(闭包)的指针(引用) 简短回答: 当你有var两次=乘数(2)与以下代码相同: 二次=函数(数){返回数*2}; 假设乘法器是一个类,它有一个属性factor(初始化对象需要),当初始化乘法器时,它返回一个函数,该函数接受number,并

有人能解释一下为什么“number”参数没有作为未定义返回吗?我真的很难理解,如何将变量“两次”定义为一个固定值为2的函数作为其参数,然后将其用作一个具有可通过参数5的函数

将变量“两次”定义为固定值为2的函数

那不是你在那里做的<代码>两次只是指向
乘法器中的函数(
闭包
)的指针(
引用

简短回答:

当你有
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;
}