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、希望大家能给个详细的解释。
第一个能增加是因为闭包这应该没啥异议.
第二个我是这样理解的
第一次
var result = a();
调用时因为没有
var
所以第一次window.iAdd
=第一个里面的iAdd函数而第二次
a()
window.iAdd
被第二次的iAdd函数覆盖了这两次看似相同 但是他们的
i
是不一样的,两个闭包里的i是不一样的.调用第二次的iAdd(也是你之后不断做的) 不能改变第一次的
i
result()
是输出第一次里的i