小编典典

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

javascript

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

以前的开发人员使用了两种声明函数的方式,我无法弄清楚它背后是否有原因。

这两种方式是:

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

使用这两种不同方法的原因是什么,每种方法的优缺点是什么?有什么可以用一种方法完成而另一种方法无法完成的吗?


阅读 373

收藏
2021-12-31

共1个答案

小编典典

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

例如,一个函数表达式:

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

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

并且,一个函数声明:

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

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

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

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