繁体   English   中英

有人可以解释下面的Javascript代码吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM