总共遇到了两个有关闭包的问题。
1.以下代码的运行结果是什么,如果希望看到控制台每隔一秒连续输出1-9,应该如何修改代码
for(var i=1;i<10;i++){
setTimeout(function(){
console.log(i);
},1000);
}
由于在setTimeout函数里面的匿名函数内引用了外部的变量i,造成了闭包问题。控制台会连续打印9个是10.所以解决该问题的要点就是解决闭包问题。解决闭包的方法,可以采用匿名函数。模仿块级作用域的方法。
我自己写的方法如下(当时小手一抖,我就把num*1000写成了1000):
for (var i = 1; i < 10; i++) {
(function(num){
setTimeout(function(){
console.log(num);
},num*1000);
})(i);
}