[英]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
參數( y
或x
或兩者)。 undefined+number
或undefined+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 + y
( 5 + 2
)。
注意:並不是將x真正設置為5
(而是仍然是對外部x的引用),但是我認為這更易於理解,並且在此特定示例中不會更改任何內容
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.