1

我宁愿一直使用函数声明,因为我可以将函数放在源文件的任何位置。如果我使用函数表达式,函数必须放在源文件的顶部。使用函数表达式而不是函数声明有什么好处?

是否有很好的情况下使用函数表达式而不是函数声明?

//Function declaration 
function foo() { return 5; } 

//Anonymous function expression 
var foo = function() { return 5; } 
+0

请问为什么是反面投票?你能解释为什么我可以改进吗? – user781486

+5

[为什么使用命名函数表达式?](http://stackoverflow.com/questions/15336347/why-use-named-function-expressions) – vaultah

+0

例如,如果您希望foo根据配置或环境。 – webduvet

回答

1

所有变量声明都在范围的顶部悬挂,所有函数定义也在范围的顶部悬挂起来。因此

console(foo()); // prints foo 
function foo(){return 'foo'}; 

console(foo()); // complain foo is not function, it is undefined 
var foo = function(){return 'foo'}; 

第二示例是相同的这一点:

var foo; 
console.log(foo()); 
foo = function(){} 

用于使用第二表达将从编程逻辑干的原因。例如:

var foo = MY_ENV_VAR ? function(){return true} : function(){return false} 

或运行更好地理解下面的例子:

var bar;                                                 

if (true) { 
    function foo(){return 'foo'}; 
    bar = function(){return 'hey'}; 
} else { 
    function foo(){return 'another'}; 
    bar = function(){return 'bar'}; 
} 
console.log(foo()); 
console.log(bar()); 

第一个日志将是another,因为JS的编译器把该范围的顶部和第二个声明函数声明只是覆盖第一个。而第二个日志输出if语句中分配的函数的结果,该语句将为hey

相关问题