Javascript中的函数分解

Function decaration in Javascript

本文关键字:分解 函数 Javascript      更新时间:2023-09-26

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

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

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

我在这里被告知:

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

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

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

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

第二个是函数表达式

(具体来说,是匿名函数表达式)。与所有表达式一样,在分步执行代码时遇到它时,将对其进行处理。与所有表达式一样,它可以位于控制块内。它会导致一个函数没有为具有名称的变量分配名称。

第三个是命名函数表达式。这是一个类似于上面的函数表达式,但该函数也被赋予了一个名称。您希望在IE8及更早版本中避免这些,因为IE实际上会弄错,创建两个单独的函数(在两个不同的时间)。(基本上,IE 将其视为函数声明函数表达式。IE9终于做对了。

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