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
添加回答
举报
0/150
提交
取消