你能否解释为什么医生1中的返回功能可能比医生2中的更好?
//-----------------Doctor 1--------------------------
function doctor1() {
return function() { alert("How are you, today?"); };
}
var x = doctor1();
x();
//-----------------Doctor 2--------------------------
function doctor2() {
return alert("How are you, today?");
}
doctor2();
//-------------------------------------------

答案 0 :(得分:1)
在你的特殊情况下,并没有什么区别。但是如果你想创建保留某些状态的函数(即创建闭包),返回一个函数可能很有用:
function doctor1(num) {
return function() { alert("How are you, today? " + num); };
}
var functions = [];
for (var i = 0; i < 3; i++) {
functions.push(doctor1(i));
}
// The functions "remember" the values 0, 1, and 2
for (var i = 0; i < functions.length; i++) {
functions[i]();
}
顺便说一句,您的doctor2
函数不需要return
语句,因为alert
不会返回任何内容。
修改:我想澄清一下,您返回的功能不一定是匿名的:
function doctor1(num) {
return function myFunc() { alert("How are you, today? " + num); };
}
在调试时命名这样的函数会有所帮助。如果函数抛出错误,您将在控制台中看到函数名称。