JavaScript函数声明样式

时间:2011-10-11 17:44:46

标签: javascript

在Javascript中,我看到了三种不同的方法来定义函数。

  • 传统风格:

function foo() { //do something }

  • New Js Ninja Style

var foo = function(){ //do something }

  • DOM特定风格

window.foo = function(){ //do something }

问题是什么,

以上三者有什么区别?我应该使用哪一个&为什么吗

2 个答案:

答案 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 =之间的区别。

第一个是本地范围的变量,它很漂亮可爱(除非在全局范围内完成)。第二个是一个显式全局,它具有全局变量的所有常见问题(例如与其他代码冲突的可能性)。