我最近开始维护其他人的JavaScript代码.我正在修复错误,添加功能,并尝试整理代码并使其更加一致.
以前的开发人员使用两种声明函数的方法,如果背后有原因,我就无法解决.
这两种方式是:
var functionOne = function() {
// Some code
};
Run Code Online (Sandbox Code Playgroud)
function functionTwo() {
// Some code
}
Run Code Online (Sandbox Code Playgroud)
使用这两种不同方法的原因是什么?每种方法的优缺点是什么?有一种方法可以通过一种方法完成,而另一种方法无法完成吗?
我们有两种不同的方式在JavaScript中进行函数表达式:
命名函数表达式(NFE):
var boo = function boo () {
alert(1);
};
Run Code Online (Sandbox Code Playgroud)
匿名函数表达式:
var boo = function () {
alert(1);
};
Run Code Online (Sandbox Code Playgroud)
并且可以调用它们boo();.我真的不明白为什么/什么时候我应该使用匿名函数,何时我应该使用命名函数表达式.他们之间有什么区别?
在提升中,变量优先于函数定义还是反之亦然?请看下面的代码:
function a()
{
var x = 10;
function x() {
return 20;
}
return x;
}
Run Code Online (Sandbox Code Playgroud) 以下可能有点无意义,但为什么下面的第一个调用工作而第二个调用失败?
var foo = function bar() {
console.log("Martini");
}
foo(); // works
bar(); // undefined; i.e. "Uncaught ReferenceError: bar is not defined"
Run Code Online (Sandbox Code Playgroud)
那与范围有关吗?
推论初学者的问题:函数定义"解析" - 但实际上是有效的语法 - 并且是否存在命名指定的匿名函数有意义的任何上下文?