什么你问的是,做东西给你一个函数:
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