我最近开始维护别人的JavaScript代码。我正在修复错误,添加功能,还试图整理代码并使之更加一致。
以前的开发人员使用了两种方法来声明函数,如果有背后的原因,我将无法解决。
两种方式是:
var functionOne = function() { // Some code }; function functionTwo() { // Some code }
使用这两种不同方法的原因是什么,每种方法的利弊是什么?有什么方法可以用一种方法不能完成的吗?
区别在于它functionOne是一个函数表达式,因此仅在到达该行时才定义,而是functionTwo函数声明,并在其周围的函数或脚本执行后(由于提升)而定义。
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(); } }
上面的定义实际上functionThree与test的值无关,除非use strict有效-除非有效,在这种情况下,它只会引发错误。
functionThree
test
use strict