Noo*_*r_1 5 javascript closures currying
我正在阅读" Eloquent JavaScript ".第3章介绍了" 闭包 "概念,并给出了几个例子.其中一个是下一个:
function multiplier(factor) {
return function(number) {
return number * factor;
};
}
var twice = multiplier(2);
console.log(twice(5));
// ? 10
Run Code Online (Sandbox Code Playgroud)
我想我理解这个概念.如果我先执行console.log(twice),因为变量number是未定义的,我得到的是[Function].我不明白的是如何twice(5)运作.为什么局部变量number用值初始化5?
另外,为什么如果我执行console.log(multiplier(2,5))我不会得到10结果?
谢谢.
因为multiplier返回一个函数,所以twice等于返回的函数,而不是multiplier函数.
但是,在multiplier调用时,factor传递变量并在返回的函数中使用.
因此,为了使其更容易理解,请考虑twice基本上:
var twice = function(number) {
return number * 2;
};
Run Code Online (Sandbox Code Playgroud)
在factor调用时传入的值已被替换的位置multiplier(2).
我想我理解这个概念.如果我先执行
console.log(twice),因为变量号未定义,我得到的是[Function].
当您使用时,console.log(twice)您实际上并没有调用该函数twice,而只是记录它的值.因此输出[Function]不是因为number未定义,而是因为您输出的是实际函数而不是它的结果.
另外,为什么如果我执行
console.log(multiplier(2,5))我不会得到10结果?
这里你multiplier通过提供2个参数来调用,尽管你只定义了函数来接受一个参数(factor).在javascript中,这不会导致错误,但您将获得映射在factor(factor = 2)中的第一个值.
注意:即使您没有为它们定义参数,仍有一些方法可以访问所有提供的参数(这是一个示例)
要获得10可能感兴趣的结果的东西是使用以下代码:
var result = multiplier(2)(5); // result = 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |