我正在阅读another question,我看到了这一点:
var basketModule = (function() {
var basket = []; //private
return { //exposed to public
addItem: function(values) {
basket.push(values);
},
getItemCount: function() {
return basket.length;
},
getTotal: function(){
var q = this.getItemCount(),p=0;
while(q--){
p+= basket[q].price;
}
return p;
}
}
}());
你能解释一下他为什么要在( and )
中包装这个函数吗?另外,return
的目的是什么?他不能只写self.addItem = ...
等等吗?
答案 0 :(得分:2)
使用parantheses包装函数,并在其末尾添加()
时,它是一个自执行函数。
(function() x() {
//do something;
})();
并且,通过返回他使basket
变量有些私密。尝试从其他任何地方获取basketModule.basket
,您将得到未定义。
答案 1 :(得分:2)
这称为javascript Module Pattern。定义一个函数并立即调用它来防止变量在全局空间或定义一个函数名。
答案 2 :(得分:0)
注意最后一行的括号:()
。该函数已定义并立即调用:
(function() { })();
return { ... }
返回一个方法addItem
答案 3 :(得分:0)
代码的目的是使用三种方法创建一个对象。 addItem,getItemCount和getTotal。它们都取决于篮子所代表的状态。
如果全局定义了一个状态将被暴露(并且只能存在一个变量篮子。这两个都可能导致问题,因此通过包装整个声明,状态被封装并且只能从创建的对象访问。 / p>
还有其他方法可以实现相同的目标,而且pro和con与风格以及您将需要的特定类型的对象有关。
由于function(){}()
无法解析,因此需要<{>包装function(){}()