javascript中的函数衰减

Function decaration in Javascript

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the difference between a function expression vs declaration in Javascript?

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

  • 1
    2
    3
    function foo(){
         alert('BAR');
    }
  • 1
    2
    3
    var foo = function (){
         alert('BAR');
    }
  • 1
    2
    3
    var foo = function bar(){
         alert('BAR');
    }
  • 有人告诉我:

    It happens at a different time, and results in a variable referring to an anonymous function. A function declaration happens prior to any stepwise code executing in the scope, and results in both a binding and a function with a proper name.

    我声明函数的方式真的会影响代码的效率吗?如果是,哪种方式最适合使用?


    是的,有一个很大的区别。

    第一个是函数声明。它发生在进入执行上下文时,在处理任何一步一步的代码之前。它不能在任何类型的控制块内(例如,它在if语句的主体中是不合法的;但是,如果您这样做,大多数浏览器都会尝试适应它;有时会导致非常令人惊讶的行为与规范不符)。它产生一个命名函数。

    第二个是函数表达式(特别是匿名函数表达式)。与所有表达式一样,它是在代码的逐步执行中遇到的时候处理的。和所有表达式一样,它也可以在一个控制块内。它会产生一个没有名称分配给具有名称的变量的函数。

    第三个是命名函数表达式。它是一个与上面类似的函数表达式,但是函数也有一个名称。您希望通过IE8和更早的版本避免这些问题,因为IE实际上会出错,创建两个单独的函数(在两个不同的时间)。(基本上,IE将其视为一个函数声明和一个函数表达式。)IE9最终获得了这一权利。

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