以下JavaScript模块定义是否有任何好处:
var module = (function(){
var PublicFnc = function(){ // variable declaration
alert('hi');
}
return {
f : PublicFnc
}
})();
module.f();
以下内容:
var module = (function(){
function PublicFnc(){ // function declaration
alert('hi');
}
return {
f : PublicFnc
}
})();
module.f();
虽然第二个例子更方便,因为它更类似于Java / C#,匿名方法被更频繁地使用,我想知道它有什么好处?
@Alexander,感谢您将问题标记为重复但我倾向于保持开放,因为我要求在模块模式的上下文中获益,而不是通常
答案 0 :(得分:2)
可以使用名为提升
的概念来解释它们之间的差异之一以防:
a(); //you cannot call this function before its definition as here var a is undefined
var a = function(){ //function statement
console.log("Hello World");
}
a(); //this will call the function even before its definition because of hoisting
function a(){ //function definition
console.log("Hello World");
}
在上述情况下,一些函数也会使用该变量分配一个内存空间。
在提升中,函数定义被提升而不是函数语句。
详细了解在此提升http://www.w3schools.com/js/js_hoisting.asp
此外,何时使用语句以及何时使用定义取决于用例和个人偏好