闭包函数的一个简单测试疑惑

var uniqueInterger = (function(){
                var counter = 0;
                return function(){
                    return counter++;
                };
            }());  
            console.log(uniqueInterger());

这里返回值是0,为什么不是1呢?

阅读 2.2k
4 个回答

你得理解++的位置含义

return counter++; ++放后面表示,前面变量该干嘛先干嘛,干完之后,我再给他加1.

所以你第一次执行是,变量值是0,直接return走了,然后变量+1.

你如果再次调用方法 ,就给你1了。此时counter值+1,就是2了。

这里不是闭包的问题,而是counter++++counter的区别的问题
counter++是先使用counter值,然后再自增,也就是说在执行函数时,先输出counter为0,然后counter自增变成1。
如果你将counter++改成++counter就会成功的输出1,因为是先counter自增变成1之后,再输出该值

你可以试试把++放前面。

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