javascript - 有关闭包问题。
怪我咯
怪我咯 2017-04-11 12:18:17
[JavaScript讨论组]
function outer() {
    var n = 999;
    nAdd = function() { n++; };
    function fun() { return n; }
    return fun;
}

var result1 = outer();
var result2 = outer();
console.log(result1());//999
console.log(result2());//999
nAdd();
console.log(result1());//999
console.log(result2());//1000

不明白,,第三个输出不应该也是1000吗??

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
高洛峰

每次调用 outer() 都会产生一个新的作用域,所以 result1result2 所对应的 n 是不一样的。

巴扎黑

你的代码执行应该是产生了两个闭包。
var n = 999;属于函数的作用域。 nAdd函数里面的n始终指向result2产生的闭包。

PHP中文网

刚刚说错了,我懂了,正如上面的同志说的。因为取得那个 n 都是 各自 函数定义域里面的那个 n , 而nAdd()执行的其实是 result2里面的那个 nAdd,因为第一次被第二的给覆盖掉了。所以 nAdd其实加的是 result2里面的那个n,而第一个里面的那个n并没有加。所以 result1个弹出来的还是 999,它作用域里面的n并没有加1;result2里面的才加了1,所以n===1000

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号