JavaScript模块模式中的匿名vs命名函数?

时间:2016-07-06 17:15:23

标签: javascript

以下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,感谢您将问题标记为重复但我倾向于保持开放,因为我要求在模块模式的上下文中获益,而不是通常

1 个答案:

答案 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

此外,何时使用语句以及何时使用定义取决于用例和个人偏好