Javascript中的函数decaration

Nea*_*eal 1 javascript function

可能重复:
Javascript中函数表达式与声明之间有什么区别?

以这些方式声明函数之间是否存在主要区别:

  1. function foo(){
         alert('BAR');
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. var foo = function (){
         alert('BAR');
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. var foo = function bar(){
         alert('BAR');
    }
    
    Run Code Online (Sandbox Code Playgroud)

我在这里被告知:

它发生在不同的时间,并导致变量引用匿名函数.函数声明发生在作用域中执行的任何逐步代码之前,并导致绑定和具有正确名称的函数.

我声明我的函数的方式是否真的会影响我的代码的效率,如果是这样,最好使用哪种方式?

T.J*_*der 7

是的,存在重大差异.

第一个是函数声明.在处理任何逐步代码之前,它会在进入执行上下文时发生.它不能在任何类型的控制块内(例如,它在if声明的正文中是不合法的;但是,如果你这样做,大多数浏览器将试图容纳它 - 有时导致非常令人惊讶的行为  - 与规范不一致).它产生一个命名函数.

第二个是函数表达式(具体地,是匿名函数表达式).与所有表达式一样,它是在逐步执行代码时遇到的.和所有表达式一样,它可以在一个控制块内.它导致一个函数没有为具有名称的变量分配名称.

第三个是命名函数表达式.它是一个像上面这样的函数表达式,但函数也有一个名字.你想用IE8和更早版本避免这些,因为IE实际上会把它弄错,创建两个独立的函数(在两个不同的时间).(基本上,IE将其视为函数声明函数表达式.)IE9最终得到了正确的结果.

请注意,您的第二个和第三个示例依赖于自动分号插入; 因为那些都是赋值语句,它们应该以;(在}函数结束之后)结束.