我最近开始维护其他人的JavaScript代码.我正在修复错误,添加功能,并尝试整理代码并使其更加一致.
以前的开发人员使用两种声明函数的方法,如果背后有原因,我就无法解决.
这两种方式是:
var functionOne = function() {
// Some code
};
Run Code Online (Sandbox Code Playgroud)
function functionTwo() {
// Some code
}
Run Code Online (Sandbox Code Playgroud)
使用这两种不同方法的原因是什么?每种方法的优缺点是什么?有一种方法可以通过一种方法完成,而另一种方法无法完成吗?
以下代码行之间有什么区别?
//Function declaration
function foo() { return 5; }
//Anonymous function expression
var foo = function() { return 5; }
//Named function expression
var foo = function foo() { return 5; }
Run Code Online (Sandbox Code Playgroud)
对类似问题(var functionName = function(){} vs function functionName(){})的响应是不是完全正确?
我正在阅读一些关于闭包的帖子,到处都看到了这个,但是没有明确的解释它是如何工作的 - 每次我被告知要使用它......:
// Create a new anonymous function, to use as a wrapper
(function(){
// The variable that would, normally, be global
var msg = "Thanks for visiting!";
// Binding a new function to a global object
window.onunload = function(){
// Which uses the 'hidden' variable
alert( msg );
};
// Close off the anonymous function and execute it
})();
Run Code Online (Sandbox Code Playgroud)
好的,我看到我们将创建新的匿名函数,然后执行它.所以在那之后这个简单的代码应该工作(并且确实如此):
(function (msg){alert(msg)})('SO');
Run Code Online (Sandbox Code Playgroud)
我的问题是这里发生了什么样的魔术?当我写作时我想:
(function (msg){alert(msg)})
Run Code Online (Sandbox Code Playgroud)
然后会创建一个新的未命名函数,如函数""(msg)...
但那么为什么这不起作用?
(function (msg){alert(msg)});
('SO');
Run Code Online (Sandbox Code Playgroud)
为什么它需要在同一行?
你能指点一些帖子或给我解释一下吗?
var a = function b() {
};
console.log(typeof b); //gives undefined
console.log(typeof a); //gives functionRun Code Online (Sandbox Code Playgroud)
为什么两个输出的差异?
我理解函数表达式和函数语句之间的区别,但不能理解上面的输出.
据我所知,javascript var a指向分配给命名函数b的内存.在这种情况下typeof b也应该返回,function但它返回undefined
有什么解释吗?