在Javascript中,我看到了三种不同的方法来定义函数。
function foo()
{
//do something
}
var foo = function(){
//do something
}
window.foo = function(){
//do something
}
问题是什么,
以上三者有什么区别?我应该使用哪一个&为什么吗
答案 0 :(得分:10)
第一个是功能声明。它被悬挂(您可以在当前范围内的任何地方使用它)。
第二个是使用匿名函数的变量定义。变量悬挂,任务保持不变。在您指定该行之前,该函数可能无法使用。
第三个是分配全局方法。与第二个类似,虽然适用于全局对象,但这并不好。
然而,你可以考虑第四种选择(命名函数表达式):
var foo = function bar(){ //do something }
这里,bar只能在其自身内部使用,这对于递归非常有用,而不是用它来搅拌当前范围。
您正在根据自己的需求选择任何方法。我只投票反对第二种方法,因为它使函数表现得像变量。
一旦你提到第二个和第三个选项,我想提醒污染全球对象是considered bad practice。您最好考虑使用自执行匿名函数来创建单独的范围,例如
(function(){
var t = 42; // window.t still does not exist after that
})();
我想您可能会在JavaScript Scoping and Hoisting找到更详细的文章。
答案 1 :(得分:2)
首先,请参阅Javascript: var functionName = function() {} vs function functionName() {}。
然后我们了解var foo =
和window.foo =
之间的区别。
第一个是本地范围的变量,它很漂亮可爱(除非在全局范围内完成)。第二个是一个显式全局,它具有全局变量的所有常见问题(例如与其他代码冲突的可能性)。