簡體   English   中英

有人可以向我解釋此JavaScript函數的流程嗎? (關閉概念)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM