var goTop=function (){
let i=0;
i++;
console.log(i);
}
setInterval(goTop,1000);
这段代码为什么一直打印出1,如何让他打印12345,i递增!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
**因为你每次调用函数goTop,又let i=0;把i重新声明为0了
要输出1234....只需要把let扔出去**
顺便下面这个才叫闭包:
闭包的二大要点:
// 1、在函数A外面,调用函数A内的内容——函数B
// 2、函数B可以层层向上调用局部变量n和全局变量m,但是外面的无法获取n
这是变量生命周期和作用域问题,不是闭包问题,因为你的代码根本没有闭包。但是闭包可以解决你的问题。
使用
let关键字定义的i,只在函数中有效,当函数调用完后,i被收回。1 秒钟之后再次调用函数时,i 又重新被初始化为 0。通过把
i定义在函数外可以解决此问题,但是代码有点 low。我们还可以定义一个闭包来解决这个问题。用闭包的代码如下:
let在这里使得变量的作用域变成一个块级作用域。
每次执行后,i都会重新赋值,执行后结果也就是1。
其实这个问题也就是作用域问题
你没发现,每次执行你的函数,就定义一个变量,初值为0,然后自增,那最后打印出来一定是1啦