簡體   English   中英

有人可以解釋這個Javascript關閉示例

[英]Can someone explain this Javascript closure example

function makeAdder(x) {
    return function(y) {
        console.log("X:" + x + " Y:" + y);
        return x + y;
  };

}

var add5 = makeAdder(5);
var add10 = makeAdder(10);

console.log(add5(2));
console.log(add10(2));

好的,我對developer.mozilla的閉包示例有點困惑。

如果有人可以提供盡可能詳細的解釋,以便我着手解決封閉問題。

忽略console.log,我只是添加了它,以查看顯示了什么值,例如,在執行add5時,我可以看到x為5,y為2。

我安慰了add5(),看看得到了什么,我得到了NaN-我猜這是因為我沒有指定一個參數,因為它想要一個並且不能將數字加到undefined中。

因此,混淆之處在於madeAdder內部函數中的參數y。

希望有人能提供比mozilla更好的解釋...我認為線索是環境,但是我對此並不陌生,因此需要專家的幫助。

謝謝

function makeAdder(x) {
    return function(y) {
        console.log("X:" + x + " Y:" + y);
        return x + y;
    };
}

makeAdder需要一個名為x參數,並返回一個需要參數y的新函數。 執行此內部函數時,外部范圍的x將添加到參數y並返回總和。

var add5 = makeAdder(5); 將創建內部函數的新實例並將其存儲到add5 此內部函數的x設置為5 當使用add5(2)執行add5 ,它將返回7 ,因為x值(外部作用域5 )將添加到參數2

add10的過程相等。

在不傳遞參數(內部或外部函數或兩者)時進行編輯 ,則將不undefined參數( yx或兩者)。 undefined+numberundefined+undefined返回NaN因為一個或多個被加數不是數字。

編輯2 :過程演練:

var add5 = makeAdder(5); 會將add5設置為:

function(y) {
   console.log("X:" + 5 + " Y:" + y);
   return 5 + y;
}

因為makeAdder(5)返回其內部函數並將x設置為5。所以現在用var sum = add5(2);執行時var sum = add5(2); 此生成的函數將計算並返回5 + y5 + 2 )。

注意:並不是將x真正設置為5 (而是仍然是對外部x的引用),但是我認為這更易於理解,並且在此特定示例中不會更改任何內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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