var goTop=function (){
let i=0;
i++;
console.log(i);
}
setInterval(goTop,1000);
这段代码为什么一直打印出1,如何让他打印12345,i递增!
var goTop=function (){
let i=0;
i++;
console.log(i);
}
setInterval(goTop,1000);
这段代码为什么一直打印出1,如何让他打印12345,i递增!
这是变量生命周期和作用域问题,不是闭包问题,因为你的代码根本没有闭包。但是闭包可以解决你的问题。
使用 let
关键字定义的 i
,只在函数中有效,当函数调用完后,i
被收回。1 秒钟之后再次调用函数时,i 又重新被初始化为 0。
通过把 i
定义在函数外可以解决此问题,但是代码有点 low。我们还可以定义一个闭包来解决这个问题。
用闭包的代码如下:
const closure = function () {
let i = 0;
return function () {
i++;
console.log(i);
}
};
const goTop = closure();
setInterval(goTop,1000);
var goTop=function (){
let i=0;
return function (){
i++;
console.log(i);
}
}()
setInterval(goTop,1000);
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
**因为你每次调用函数goTop,又let i=0;把i重新声明为0了
要输出1234....只需要把let扔出去**
顺便下面这个才叫闭包:
闭包的二大要点:
// 1、在函数A外面,调用函数A内的内容——函数B
// 2、函数B可以层层向上调用局部变量n和全局变量m,但是外面的无法获取n