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、希望大家能给个详细的解释。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
第一个能增加是因为闭包这应该没啥异议.
第二个我是这样理解的
第一次
var result = a();调用时因为没有
var所以第一次window.iAdd=第一个里面的iAdd函数而第二次
a()window.iAdd被第二次的iAdd函数覆盖了这两次看似相同 但是他们的
i是不一样的,两个闭包里的i是不一样的.调用第二次的iAdd(也是你之后不断做的) 不能改变第一次的
iresult()是输出第一次里的i就只针对下边一段代码说吧 我改了注释 我是这么理解的 你觉得呢
每执行一次a()都想当于新产生了一个闭包环境,但是iAdd是一个全局变量,第二次调用a(),覆盖了第一次的,
而result是第一次调用a()产生的
所以iAdd操作的是第二个闭包的i,而result输出的是第一个闭包的i,所以结果一直为99
首先是先运算后++……
对,每次a(),重新var i,在内存中维持了两个互不干扰的i