一尘不染

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

javascript

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

以前的开发人员使用了两种方法来声明函数,如果有背后的原因,我将无法解决。

两种方式是:

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



function functionTwo() {
    // Some code
}

使用这两种不同方法的原因是什么,每种方法的利弊是什么?有什么方法可以用一种方法不能完成的吗?


阅读 325

收藏
2020-04-22

共1个答案

一尘不染

区别在于它functionOne是一个函数表达式,因此仅在到达该行时才定义,而是functionTwo函数声明,并在其周围的函数或脚本执行后(由于提升)而定义。

例如,一个函数表达式:

// TypeError: functionOne is not a function

functionOne();



var functionOne = function() {

  console.log("Hello!");

};

并且,一个函数声明:

// Outputs: "Hello!"

functionTwo();



function functionTwo() {

  console.log("Hello!");

}

这也意味着您不能使用函数声明有条件地定义函数:

if (test) {
   // Error or misbehavior
   function functionThree() { doSomething(); }
}

上面的定义实际上functionThreetest的值无关,除非use strict有效-除非有效,在这种情况下,它只会引发错误。

2020-04-22