我最近开始维护别人的 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/