什麼你問的是,做東西給你一個函數:
function giveMeAFunctionThatBeeps(){
return function() {
alert('Beep!');
}
}
var beeper = giveMeAFunctionThatBeeps();
beeper(); // beeps!
實際giveMeAFunctionThatbeeps只是一個工廠,爲您提供了一個功能,你想要做什麼。
在他們所提供的例子,你在做同樣的事情,蜂鳴器,但你也傳遞一個值:
function giveMeAFunctionThatBeepsANumber(x){
return function() {
alert('Beep ' + x);
}
}
這將返回一個蜂鳴器(這是一個工廠記不清了),但蜂鳴器提醒x的值。
然而,這個值設置當您第一次創建蜂鳴器:
var beeper = giveMeAFunctionThatBeeps(5);
beeper(); // beeps 5!
蜂鳴器響鬧卡住值5,現在,我們不能做任何事情。
下一個例子是,如果你想創建一個蜂鳴任意數量的蜂鳴器:
function giveMeAFunctionThatBeepsANumber(){
return function (x) {
alert('Beep ' + x);
}
}
var beeper = giveMeAFunctionThatBeeps();
beeper(6); // beeps 6!
beeper(7); // beeps 7!
正如現在我們要求廠方給我們,我們可以插入一個數字的功能。
然後最後,最初的例子,是上述兩種的組合:
function giveMeAFunctionThatBeepsANumber(x){
return function (y) {
alert('Beep ' + (x + y));
}
}
var beeper = giveMeAFunctionThatBeeps(2);
當我們創建了蜂鳴器,我們正在傳遞2.記住如上,我們不能事後改變這個!它會一直蜂鳴2 ...
...但因爲它是一個工廠(具有值2預配置)返回一個函數,它接受一個參數,我們可以自定義它,當我們運行:
beeper(6); // beeps 8! because x was set when we created it, and y is what we pass in.
我明白了,我的大腦仍然在努力得到它,我只是想看看y是如何通過或設置的,因爲add10(3)在我的腦海裏沒有提及它,說你的設置X不是爲什麼?這似乎很混亂:( – mustafa
不,在調用'addAdder(10)'時'x'設爲'10',在調用'add10(2)'中設置爲'2'。 –
但是不應該makeAdder(10,2)做同樣的事情,或者我們在做的事情本質上是makeAdAd(10)。(2)? 非常感謝你們:) – mustafa