JavaScript函数声明样式

JavaScript函数声明样式,javascript,Javascript,在Javascript中,我看到了定义函数的三种不同方法 传统风格: 函数foo() { //做点什么 } 新Js忍者风格 var foo=function(){ //做点什么 } 特定于DOM的样式 window.foo=function(){ //做点什么 } 问题是, 以上三者之间的区别是什么?我应该使用哪一个&why?首先,请参阅 然后我们得到var foo=和window.foo=之间的区别 第一个是一个局部范围的变量,它很好,很可爱(除非它是在全局范围内完成的)。第二个是

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

  • 传统风格:
函数foo()
{
//做点什么
}

  • 新Js忍者风格
var foo=function(){
//做点什么
}

  • 特定于DOM的样式
window.foo=function(){
//做点什么
}

问题是,

以上三者之间的区别是什么?我应该使用哪一个&why?

首先,请参阅

然后我们得到
var foo=
window.foo=
之间的区别


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

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

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

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

但是,您可以考虑第四种选择(命名函数表达式):

在这里,bar只在其内部可用,这对于递归很有用,并且不会影响当前的作用域

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

当你提到第二个和第三个选项时,我想提醒你,污染全球的物体是有害的。您最好考虑使用自动执行的匿名函数来创建单独的作用域,例如

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

我想你可能会找到一篇关于有用的更详细的文章。

可能重复的。还有var foo=function foo(){//do something}它的“highed”是什么意思?此外,缺点是我使用第二种方法声明。因为从我对javascript的有限理解来看,一切都是一个对象——变量、函数。简而言之,所有变量和函数声明都在内部提升(提升)到当前范围的开头。首先是函数,然后是变量。作业放在原地。优秀的帖子+那篇文章也很棒。如果我想声明一个全局函数-这两者没有区别?通常你应该避免在全局范围内做任何事情@高卢的。
(function(){
    var t = 42; // window.t still does not exist after that
})();