js中return{}大括号的含义

像以下的代码

var testModule = (function(){
    var counter = 0;
    return {
        incrementCounter: function(){
            return ++counter;
        },
        resetCounter: function(){
            counter = 0;
        }
    };
})();

是否可以理解为return 返回一个匿名的对象, 赋给testModule ,然后testModule拥有了incrementCounter和resetCounter两个可以访问闭包的方法 ? {}和里面的内容是否可以称为一个匿名对象,js有没有这个概念 ?

阅读 8.8k
7 个回答

Objectliteral,翻译为对象字面量,其实和Anonymous是一个目的,因为有些对象我们并不经常使用,所以就不给他添加引用,让GC回收掉,这样的好处大概有两个:

  1. 防止污染命名空间

  2. 利用了闭包特性

所以DC大神觉得这东西很不错,而且你知道,JSON就是这样来的。
PS:JS中很多特性的目的和其他语言中类似的特性目的是一样的,仅仅叫法不一样,比如箭头函数和懒不大,哦不lambda。

你说的没有瑕疵呀,不过js里没听说匿名对象的,叫对象字面量更合适吧

这个是闭包的使用,对外暴露了两个方法,然后可以在这个里面操作counter属性,就相当于counter是公有方法,不过没有听过匿名对象。。这个一般叫对象字面量

返回一个对象嘛,返回到window作用域(如果该匿名函数在全局)。没有var testModule = 的话,就相当于这个对象在内存中,但是由于没有引用(指针)没法使用而已,用js引擎内部方法应该可以访问到,没有引用的在一定条件下就被当垃圾回收了

你return的就是一个对象;

分析的也很对, 你的结果相当于是

var testModule = 
{
    incrementCounter: function(){
        return ++counter;
    },
    resetCounter: function(){
        counter = 0;
    }
}

这不就是对象吗

返回一个对象

有理有据,令人幸福

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题