[英]Can someone explain the following piece of Javascript code?
我在阅读另一个问题 ,我看到了:
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 = ...
等等吗?
当您将带有括号的函数包装起来并在其末尾添加()
时,它是一个自执行函数。
(function() x() {
//do something;
})();
而且,通过返回,他使basket
变量变得有些私密。 尝试从其他任何地方获取basketModule.basket
,您将得到未定义。
这就是所谓的javascript 模块模式 。 定义函数并立即调用它以防止变量位于全局空间或定义函数名称。
注意最后一行的括号:( ()
。 该函数已定义并立即调用: (function() { })();
return { ... }
返回具有方法addItem
的对象
该代码的目的是用三种方法创建一个对象。 addItem,getItemCount和getTotal。 它们都取决于篮子代表的国家。
如果在全局范围内定义了篮子,那么状态将被暴露(并且永远只能有一个可变篮子。这两个都可能导致问题,因此,通过包装整个声明,状态将被封装并且只能从创建的对象访问。
还有其他方法可以达到相同的目的,而优点和缺点与样式以及您需要多少特定类型的对象有关。
包装function(){}()
是必需的,因为function(){}()
不会解析
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.