闭包经典题

小测试

function fun(n,o) {
     // console.log(n,o);
     console.log(o);

    return {
        fun:function(m){
            // console.log(m+','+n);
            return fun(m,n);
        }
    };
}
var a = fun(0);a.fun(1);a.fun(2);  a.fun(3);//undefined,0,0,0
var b = fun(0).fun(1).fun(2).fun(3);//undefined,0,1,2
var c = fun(0).fun(1);  c.fun(2);  c.fun(3);//undefined,0,1,1
for (var i = 1; i <= 5; i++) {

    setTimeout( function timer() {

        console.log(i);

    }, 1000 );

}

for (var i = 1; i <= 5; i++) {

    (function(i){

        setTimeout( function timer() {

            console.log(i);

        },  1000 );

    })(i);

}

for (let i = 1; i <= 5; i++) {

    setTimeout( function timer() {

        console.log(i);

    }, 1000 );

}

手动想想为何输出以上值

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 使用var或是非对象内部的函数表达式内,可以访问到存放当前函数的变量;在对象内部的不能访问到。 原因也非常简单,因...
    木中木阅读 431评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,009评论 19 139
  • 亲爱的儿子: 有时候我想可能是前世的某种缘分,有幸今生让我们成为母子。从你出生的那天起,我就觉得你长得就是...
    cc_4b68阅读 739评论 2 3
  • 社会发展到今天,从客观的角度来看,金钱变得尤其重要:一方面是因为今天大多数人已经脱离了面朝黄土背朝天的耕种生活但却...
    文化微谈阅读 917评论 0 0
  • 有时候 当我掏心掏肺对待 一个人的时候 那个人未必会觉得你是好人 有时候 你牵好万好,都抵不过 你一个失误...
    C开心果阅读 2,574评论 0 0