2017-06-16 86 views
0

您能否解释为什么doctor1函数的返回函数会比医生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

[var functionName = function(){} vs function functionName(){}](https://stackoverflow.com/questions/336859/var-functionname-function-vs-function-functionname) –

+0

什么可能重复你的意思是_be better_? – destoryer

+0

@destoryer,我的意思是哪一个是正确的,或者如果有某种情况下你想使用其中一个! – Aseel

回答

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” t返回任何东西。

编辑:我想澄清的是返回的功能并不一定是匿名:

function doctor1(num) { 
    return function myFunc() { alert("How are you, today? " + num); }; 
} 

命名这样的功能调试时可以提供帮助。如果该函数引发错误,您将在控制台中看到函数名称。

+0

谢谢你的帮助。如果你不介意为什么那么当我提醒函数数组时,num不会被分配的数字所取代? – Aseel

+0

如果你执行'alert(functions)',你只会看到该函数的文本。但是如果你使用'console.log(函数)'并打开你的开发工具,你可以深入了解每个函数,一些浏览器会向你展示闭包(适用于我的Chrome)。所以你可以看到函数包含的数字(如0,1或2)。 –

+0

非常感谢,这是丰富的。 – Aseel