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

时间:2012-04-28 11:23:02

标签: javascript

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

4 个答案:

答案 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(){}()