以下是什么类型的函数以及它们的最佳用途是什么?
var f = function (){
var a = 0;
return {
f1 : function(){
},
f2 : function(param){
}
};
}();
我尝试将其转换为:
var f = {
a : 0,
f1: function (){
},
f2: function (param){
}
}
但似乎并不以同样的方式工作。
最佳答案
它只是一个立即调用的普通旧函数,并返回一个对象,然后由 f
引用该对象。
返回的对象引用的函数保留引用a
变量的能力。
立即调用的函数之外的任何代码都不能引用 a
,因此它享有一定的保护,因为您可以通过导出的函数精确控制 a
发生的情况。
此模式有时称为模块模式。
<小时/>关于您更新的问题,它的工作原理不同,因为 a
现在是对象的公开可用属性。
对于引用它的函数,它们可以这样做:
f.a;
或者,如果从 f
对象调用该函数,它们可以执行以下操作:
this.a;
像这样:
var f = {
a : 0,
f1: function (){
alert( this.a );
},
f2: function (param){
this.a = param;
}
}
f.f2( 123 );
f.f1(); // alerts 123
但关键是a
是公开可用的。任何有权访问 f
的代码都可以访问 f.a
,因此无需使用 f1
和 f2
即可对其进行更改功能。
这就是第一个代码的美妙之处。您可以准确控制 a
发生的情况。
关于javascript - 请解释一下这个 javascript 函数的定义及其最佳用途(模块模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8305117/