【问题标题】:Can someone explain the following piece of Javascript code?有人可以解释以下一段 Javascript 代码吗?
【发布时间】:2014-01-08 20:33:30
【问题描述】:

我正在阅读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 = ...之类的吗?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    当你用括号包装一个函数,并在它的末尾添加(),它是一个自执行函数。

    (function() x() {
     //do something;
    })();
    

    而且,通过返回,他使basket 变量变得有些私有。尝试从其他任何地方获取basketModule.basket,你会得到未定义的。

    【讨论】:

      【解决方案2】:

      这就是所谓的 javascript Module Pattern。定义一个函数并立即调用它以防止变量在全局空间中或定义一个函数名。

      【讨论】:

      【解决方案3】:

      注意最后一行的括号:()。该函数已定义并立即调用: (function() { })();

      return { ... } 返回一个具有addItem 方法的对象

      【讨论】:

        【解决方案4】:

        代码的目的是用三个方法创建一个对象。 addItem、getItemCount 和 getTotal。它们都依赖于篮子所代表的状态。

        如果篮子是全局定义的,则状态将被公开(并且可能只有一个变量篮子。这两种情况都可能导致问题,因此通过包装整个声明,状态被封装并且只能从创建的对象访问。

        还有其他实现相同目标的方法,优缺点与风格以及您需要多少特定类型的对象有关。

        包装function(){}() 是必需的,因为function(){}() 不会解析

        【讨论】:

          猜你喜欢
          • 2016-11-21
          • 1970-01-01
          • 1970-01-01
          • 2015-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-01
          相关资源
          最近更新 更多