返回匿名函数

时间:2017-06-16 18:20:10

标签: javascript

你能否解释为什么医生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();

//-------------------------------------------




1 个答案:

答案 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); };
}

在调试时命名这样的函数会有所帮助。如果函数抛出错误,您将在控制台中看到函数名称。