使用函数表达式而不是函数声明的好情况是什么?
What are good situations to use function expression instead of function declaration?
我更愿意一直使用函数声明,因为我可以将函数放在源文件的任何位置。如果我使用函数表达式,函数必须放在源文件的顶部。
在哪些情况下可以使用函数表达式而不是函数声明?
//Function declaration
function foo() { return 5; }
//Anonymous function expression
var foo = function() { return 5; }
所有变量声明都提升到作用域的顶部,所有函数定义也都提升到作用域的顶部。因此
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
.
我更愿意一直使用函数声明,因为我可以将函数放在源文件的任何位置。如果我使用函数表达式,函数必须放在源文件的顶部。
在哪些情况下可以使用函数表达式而不是函数声明?
//Function declaration
function foo() { return 5; }
//Anonymous function expression
var foo = function() { return 5; }
所有变量声明都提升到作用域的顶部,所有函数定义也都提升到作用域的顶部。因此
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
.