问题

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

以前的开发人员使用两种方式声明函数,如果有背后的原因,我就无法运行.

两种方法是:

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

使用这两种不同方法的原因是什么?每种方法的优点和缺点是什么?有什么可以做一个方法,不能与其他人做?



解决方法

不同之处在于 functionOne 是一个函数表达式,因此只有在到达该行时才定义,而 functionTwo 是一个函数声明,函数或脚本被执行(由于吊装).

例如,函数表达式:

// TypeError: undefined 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(); }
}

上面实际上定义了 functionThree 而不考虑 test 的值 - 除非 use strict 错误.




相关问题推荐