[英]Can someone explain me the flow of this JavaScript function? (Closure concept)
我正在閱讀“ Eloquent JavaScript ”。 第3章介紹“ 閉包 ”概念,並提供一些示例。 其中之一是下一個:
function multiplier(factor) {
return function(number) {
return number * factor;
};
}
var twice = multiplier(2);
console.log(twice(5));
// → 10
我想我了解這個概念。 如果首先執行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;
};
其中的factor
已替換為您在調用multiplier(2)
時傳遞的值。
我想我了解這個概念。 如果首先執行
console.log(twice)
,由於變量號未定義,我得到的是[Function]
。
當您使用console.log(twice)
時,實際上並沒有twice
調用該函數,而只是在記錄它的值。 因此, [Function]
的輸出不是因為number
未定義,而是因為您正在輸出實際的函數而不是其結果。
另外,為什么如果我執行
console.log(multiplier(2,5))
我沒有得到10結果呢?
在這里,您通過提供2個參數來調用multiplier
,盡管您僅定義了接受一個參數( factor
)的函數。 在javascript中,這不會引起錯誤,但是您只會得到映射到factor
的第一個值( factor = 2
)。
注意:即使您沒有為它們定義參數,也有一些方法可以訪問所有提供的參數( 這是一個示例 )
使用以下代碼可以得到10
的結果:
var result = multiplier(2)(5); // result = 10
乘法器是一個返回匿名函數的函數,該函數接受一個參數(數字)
var twice = multiplier(2);
基本上是:-
var twice = function(number) {
return number * 2;
};
如果執行
console.log(multiplier(2,5))
您調用提供兩個參數的函數,而
function multiplier(factor) {}
只需要一個參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.