为了账号安全,请及时绑定邮箱和手机立即绑定

关于变量作用域,闭包的问题

关于变量作用域,闭包的问题

摇曳的蔷薇 2018-09-11 13:34:51
1、这个问题个人感觉是作用域的原因,具体看代码吧。2、代码function a() {    var i = 99;     iAdd = function() {         i++;        console.log(i)     }    function b() {        console.log(i);     }    return b; }var result = a(); result();//**打印出99**iAdd(); result();//**打印出100**3、问题描述:当直接调用一次a(),那么每次的输出结果都是99.function a() {    var i = 99;     iAdd = function() {         i++;        console.log(i)     }    function b() {        console.log(i);     }    return b; }var result = a(); a(); //**先调用一次a()**result();//**结果为99**iAdd(); result();//**这里结果依然为99,不管调用多少次iAdd()都不会变,除非把a()放到后面。**4、希望大家能给个详细的解释
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

第一个能增加是因为闭包这应该没啥异议.
第二个我是这样理解的
第一次var result = a();调用

 iAdd = function() {
        i++;
        console.log(i)
    }

时因为没有var所以第一次window.iAdd=第一个里面的iAdd函数

而第二次a() window.iAdd被第二次的iAdd函数覆盖了
这两次看似相同 但是他们的i是不一样的,两个闭包里的i是不一样的.
调用第二次的iAdd(也是你之后不断做的) 不能改变第一次的i
result()是输出第一次里的i


查看完整回答
反对 回复 2018-10-12
  • 1 回答
  • 0 关注
  • 519 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信