2016-12-25 86 views
1

这是我在我的JavaScript学习跌跌撞撞最奇怪的行为之一,JavaScript如何处理嵌套函数中的参数?

这是例子:

function multiplier(factor) { 
    return function(number) { 
    return number * factor; 
    }; 
} 

var twice = multiplier(2); 
console.log(twice(5)); 
// → 10 

这是一本书Eloquent JavaScript采取的一个例子,笔者在解释它令人困惑的方式,这使得它更奇怪:

在这个例子中,乘法器返回一个冻结的代码块,获取 存储在两倍变量。最后一行然后调用 这个变量的值,导致激活冻结的代码(返回数字*因子;)为 。它仍然可以从创建它的 乘数调用中访问因子变量,并且还可以访问在解冻时通过的参数 ,通过参数 参数5。

谁能解释multiplier功能的twice() 第二个电话是如何分配的参数的嵌套函数,以及如果有更多的嵌套函数是,是什么概念,这个规则?

+0

你曾经使用C玩过吗? – leaf

回答

0

从本质上讲,乘法器在被调用时会返回一个函数。因此,当您调用乘数并将其存储两次时,函数将被存储。 你可以看一下这种方式, 当您执行的console.log(两次(5),它就像你正在执行的console.log(乘数(2)(5))

0

乘法器函数正在返回它里面的函数。所以,在第一次调用twice将等于由乘法器功能类似下面的返回功能:

twice = function(number) { 
     return number * factor; 
     }; 

这里的factor值传递给乘数功能,在第一个呼叫,将可以访问2在其内部的函数中,即使在执行之后,这也是Closures in javascript的概念。

第二次,当你调用twice(5),它将返回传递给twicefactor这是之前在第一次调用传递的5产品。因此该产品是10