javascript - var functionName = function() {} vs function functionName() {}

标签 javascript function syntax idioms

我最近开始维护别人的 JavaScript 代码。我正在修复错误、添加功能并尝试整理代码并使其更加一致。

以前的开发者使用了两种声明函数的方式,我不知道这背后是否有原因。

两种方式分别是:

var functionOne = function() {
    // Some code
};
function functionTwo() {
    // Some code
}

使用这两种不同方法的原因是什么,各自的优缺点是什么?有什么可以用一种方法做而另一种方法做不到的事情吗?

最佳答案

不同之处在于 functionOne 是一个函数表达式,因此仅在到达该行时才定义,而 functionTwo 是一个函数声明,并在其周围立即定义函数或脚本被执行(由于 hoisting )。

例如一个函数表达式:

// TypeError: functionOne is not a function
functionOne();

var functionOne = function() {
  console.log("Hello!");
};

还有,一个函数声明:

// Outputs: "Hello!"
functionTwo();

function functionTwo() {
  console.log("Hello!");
}

从历史上看, block 内定义的函数声明在浏览器之间的处理方式不一致。严格模式(在 ES5 中引入)通过将函数声明范围限定为它们的封闭 block 来解决这个问题。

'use strict';    
{ // note this block!
  function functionThree() {
    console.log("Hello!");
  }
}
functionThree(); // ReferenceError

关于javascript - var functionName = function() {} vs function functionName() {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/336859/

相关文章:

function - 我应该使用 def、cdef 或 cpdef 定义我的 Cython 函数以获得最佳性能吗?

c++ - 继承、模板和虚函数(这可能会变得困惑)

ios - Swift:Force unwrap 是 nil 但没有崩溃......?

loops - 理解go中的fmt包

javascript - 我可以使用javascript调用delphi xe8 REST服务post吗?

c - 为什么这段代码不返回垃圾值?

javascript - Jquery .parent() 获取ID

Javascript | For 循环 - 我的语法错误是什么?

javascript - Ajax jQuery MySql 删除字段

javascript - d3 似乎在 .data() 方法中静默 chop 数组