小弟正在拜读,Crockford大人的JS精粹一书,因为本人菜鸟一枚,对于递归和闭包的部分非常迷茫,递归现在好歹理解一些了,但闭包实在无力,现在挑一些不明白的,拿上来问问,下面这段的代码,我重点有两个问题,第一个是第6行的那个逗号,这个是什么意思,return里面两个函数用逗号隔开的话,是顺序执行的意思吗?然后是最后一行的结尾处的(),这个我的理解是执行函数,并把返回值付给myObject,如果我的理解队的话,是不是说,去掉这个(),这段函数的意思是把整个大的function赋给myObject?如果这样的话,是不是想用获得这个函数返回值的时候,可以这样子:var curObjectValue = myObject()?不知道我这么表述问题,是否清晰?先问这个,我一边看书一边问,从昨天看是看这部分,总共也就10页左右,实在吃不透,没办法只能来求助了,谢谢,谢谢~
var myObject = function (){
var value = 0;
return {
increment: function (inc){
value += typeof inc === 'number' ? inc : 1;
},
getValue: function (){
return value;
}
};
}();

解决方案 »

  1.   

    首先,恭喜你,已经进入了一个阶段了,这本很薄,但是我看了大概2个多月吧~~~(很弱智吧哈哈)
    其次,我来回答你的问题1、这个函数return的不是执行什么,而是一个对象。这个是个匿名对象(借词)。也就是说返回值是
    {
            increment: function (inc){
                value += typeof inc === 'number' ? inc : 1;
            },
            getValue: function (){
                return value;
            }
        }
    这个时候myObject就是这个对象的名字了,他拥有了increment和getValue两个方法了。
    2、你理解的对,这是自执行函数。剩下的你的理解没什么问题~
      

  2.   

    那关于第1点的问题,可以理解实际效果是这样,而变量value被隐藏了吗?
    var myObject = {
            increment: function (inc){
                value += typeof inc === 'number' ? inc : 1;
            },
            getValue: function (){
                return value;
            }
        };
      

  3.   

    是的~~~这样做不过就是为了那个该死的value变量~~~