1

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

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

  1. function foo(){
         alert('BAR');
    }
    
  2. var foo = function (){
         alert('BAR');
    }
    
  3. var foo = function bar(){
         alert('BAR');
    }
    

我在这里被告知:

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

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

4

1 回答 1

7

是的,有一个主要区别。

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

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

第三个是命名函数表达式。这是一个像上面一样的函数表达式,但函数也被赋予了一个名称。你想在IE8 和更早版本中避免这些,因为 IE 实际上会出错,创建两个单独的函数(在两个不同的时间)。(基本上,IE 将其视为函数声明函数表达式。)IE9 终于做到了这一点。

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

于 2012-06-14T15:17:08.780 回答