闭包小案例

来源:互联网 发布:sst nc数据下载 编辑:程序博客网 时间:2024/05/16 04:20

闭包的小案例

闭包可以用在许多地方。它的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。闭包的应用涉及作用域、函数的参数传递、变量提升等知识,当循环使用时,通过画图的方式可以更好的去理解。

以下的这段代码 n 只有1级引用

    function fun(n, s) {        //var n = 0        console.log('n='+n) //依次输出 0  1  2         console.log('s='+s) //依次输出 undefined   0   0         return {            fun: function (m) {                return fun(m, n);            }        };    }    var a = fun(0);    //传递参数的顺序对应关系为:    //外层的fun(0)调用时把0传递给了外层的形参 => n = 0   s没有实参赋值=>undefined    a.fun(1);    // 内层的fun参数m为调用外层fun函数的第一个实参 对应=> n = m = 1;    // 内层的fun函数调用外层fun函数时的 n是s的实参,当前作用域没有找到n,    //找到上一次调用外层fun时只传入了一个实参0,所以n = 0 传递后的值为 s = n = 0    a.fun(2);    // 内层的fun参数m为调用外层fun函数的第一个实参 对应=> n = m = 2;    //找到上一级作用域中的 n = 0  传递后的值为 s = n = 0

以下的这段代码 n 有多级引用

    function fun(n, s) {        //第一次 n = '外部传入的实参',之后 n = 内部调用 m 传入的值        console.log('n='+n)        //第一次 s = 'undefined',之后 s = 上一次内部调用fun环境下 n 的值        console.log('s='+s)        return {            fun: function (m) {                return fun(m, n);            }        };    }    var b = fun(0).fun(1).fun(2).fun(3);

以下的这段代码 n 存在2级引用

    function fun(n, s) {            //第一次 s = 'undefined',之后 s = 上一次内部调用fun环境下 n 的值,        //n 的引用关系决定,如果上一次的 n 存在引用关系,会一直保存这个值给下一次使用,        //每次单独调用的时候没有引用的关系        console.log('s='+s)        return {            fun: function (m) {                return fun(m, n);            }        };    }       var c = fun(0).fun(1);//输出0    c.fun(2);//输出1    c.fun(3); //输出1
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信号手机号码换了密码忘了怎么办 微信被盗密码被改绑定手机号怎么办 微信qq号登陆改密码忘记了怎么办 本人微信红包赌博输了50万怎么办 4g飞享套餐话费用完了怎么办 手机丢了查话费欠了几百块怎么办 注销电信手机卡里面的余额怎么办 联通手机卡注销后里面的余额怎么办 手机卡网上销户以后剩余话费怎么办 联通新号注册微信发不了短信怎么办 韩博士装机卡在驱动恢复怎么办 xp打印后程序服务没有运行怎么办 刚注册的微信显示异常怎么办 不小心删了照片怎么办不要钱 qq邀请好友辅助验证成功后怎么办 微信申诉怎么让好友发验证码怎么办 微信申诉好友都删除了怎么办 恋与制作人原来的帐号不见了怎么办 手机号被别人注册了手机银行怎么办 想上老婆的陌陌号但要验证码怎么办 中国家医居民端注册信息有误怎么办 别人给我充的q币怎么办 qq忘记密码手机号码也换了怎么办 手机号码不用了微信忘记密码怎么办 手机号码注销了微信忘记密码怎么办 微信忘记密码手机号码也换了怎么办 微信钱包里的钱莫名少了怎么办 被骗给人冲q币了怎么办 支付宝账户异常无法领取红包怎么办 微信q币支付错了怎么办 王者荣耀不小心把点卷用了怎么办 微信绑定的qq号密码忘记了怎么办 微信红包实名认证没银行卡怎么办 手机烂了换新手机微信支付宝怎么办 支付宝转账给别人号码没用了怎么办 微信转账验证码收不到怎么办 陌生网友生日叫我发红包怎么办 微信群的群主不小心推出群该怎么办 支付宝验证码被别人知道了怎么办 微信解除银行卡绑定零钱清零怎么办 qq号被盗了理财通的钱怎么办