函数声明样式



在Javascript中,我见过三种不同的定义函数的方法。

    传统风格:

function foo() { //do something }

  • New Js Ninja Style

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

  • DOM特定样式

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

问题是什么,

以上三者的区别是什么?我应该用哪一个&为什么?

第一个是函数声明。它被提升(您可以在当前作用域内的任何地方使用它)。

第二个是使用匿名函数的变量定义。变量被提升,赋值保持不变。该函数在指定该行之前不能使用。

第三个是分配一个全局方法。与第二个类似,但使用全局对象,这不是很好。

然而,您可以考虑第四种选择(命名函数表达式):
var foo = function bar(){ //do something }

这里,bar只在自身内部可用,这对于递归很有用,并且不会搅动当前作用域。

您正在根据您的需要选择任何方法。我只反对第二种方法,因为它使函数表现得像一个变量。

当你提到第二个和第三个选项时,我想提醒大家污染全局对象被认为是不好的做法。你最好考虑使用自执行匿名函数来创建单独的作用域,例如

(function(){
    var t = 42; // window.t still does not exist after that
})();

我想你可能会发现一篇更详细的关于JavaScript作用域和提升的文章很有用。

首先,参见Javascript: var functionName = function() {} vs function functionName(){}。

然后我们得到var foo =window.foo =之间的差异。

第一个是一个局部作用域的变量,这很好(除非它是在全局作用域中完成的)。第二个是显式全局变量,它具有全局变量的所有常见问题(例如与其他代码冲突的可能性)。

最新更新