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

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、希望大家能给个详细的解释


摇曳的蔷薇
浏览 521回答 1
1回答

倚天杖

第一个能增加是因为闭包这应该没啥异议.第二个我是这样理解的第一次var result = a();调用 iAdd = function() {         i++;         console.log(i)     }时因为没有var所以第一次window.iAdd=第一个里面的iAdd函数而第二次a() window.iAdd被第二次的iAdd函数覆盖了这两次看似相同 但是他们的i是不一样的,两个闭包里的i是不一样的.调用第二次的iAdd(也是你之后不断做的) 不能改变第一次的iresult()是输出第一次里的i
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript