雄辩的javascript-闭包和函数
在雄辩的JavaScript中,作者提供了以下示例+散文: 只需稍作修改,我们就可以将前面的示例转换为 创建乘以任意数量的函数 不需要wrapValue示例中的localVariable,因为 参数本身是一个局部变量 思考这样的计划需要一些实践。好心肠 模型将函数关键字视为“冻结”中的代码 它的主体并将其包装成一个包(函数值)。那么什么时候 阅读返回函数(…){…},将其视为返回句柄 到一个计算块,冻结以供以后使用 在本例中,乘法器返回一个冻结的代码块,该代码块 存储在两次变量中。最后一行调用中的值 此变量,导致冻结的代码(返回编号*因子;)为 激活。它仍然可以从 创建它的乘数调用,此外,它还可以访问 参数在通过其number参数解冻它(5)时传递 javascript如何知道中的5:雄辩的javascript-闭包和函数,javascript,function,Javascript,Function,在雄辩的JavaScript中,作者提供了以下示例+散文: 只需稍作修改,我们就可以将前面的示例转换为 创建乘以任意数量的函数 不需要wrapValue示例中的localVariable,因为 参数本身是一个局部变量 思考这样的计划需要一些实践。好心肠 模型将函数关键字视为“冻结”中的代码 它的主体并将其包装成一个包(函数值)。那么什么时候 阅读返回函数(…){…},将其视为返回句柄 到一个计算块,冻结以供以后使用 在本例中,乘法器返回一个冻结的代码块,该代码块 存储在两次变量中。最后一行调用中
console.log(twice(5));
是否假定为数字的值?JavaScript本质上是在对自己说“我已经有2作为因子的值,我不能改变它,所以5必须是数字的值”
换句话说
var twice = multiplier(2)
so twice = multiplier(2) {return function (number)}
thus twice(5) = multiplier(2) {return function (5)}
是这样吗
如果乘法器中有另一个局部变量,我可以调用:
twice(5,10)
javascript会知道这意味着:
factor = 2
number = 5
third variable = 10
可以这样想:
var twice = function(number) {
return number * 2;
};
当您调用乘数(2)时,您正在创建一个新函数,将因子嵌入到该新函数中。ES6版本
const multiplier = factor => {
return number => number * factor;
}
const twice = multiplier(2);
让我困惑的是,变量“tweep”被赋值为乘数函数,而不是乘数函数(也是一个函数)的返回
因此,实际分配的是:
const twice = number => number * 2
twice(2)
-> 10
我也被困在这个问题上了。以下是帮助我点击的内容 在本书的网站上,您可以与页面上的代码进行交互: 我两次尝试从变量中删除参数:
function multiplier(factor) {
return number => number * factor;
}
let twice = multiplier(2);
console.log(twice);
返回:number=>number*factor
这帮助我认识到,两次被赋予了乘数的内部功能。当我不传递参数时,它返回内部函数本身。当我将一个参数传递给两次时,它将成为该内部函数的参数,并执行它
所以当我尝试这个:
console.log(twice());
它试图执行该函数。它返回NaN,因为我没有传递number的参数
因此,当我们这样做时:
let twice = multiplier(2);
我们将变量绑定到乘数函数的内部函数,并(有效地)传递一个参数2
前面的评论更简洁地解释了这个操作,但直到点击这个按钮,我才明白它的意义
let twice = multiplier(2);