首先我们来做一题for循环的题目 做题目之前要记得一个口诀 同步 >= 异步 >=回调
for (i=0;i<5;i++){
console.log(i) //输出0,1,2,3,4
}
console.log(i) //输出 5
虽然很简单但是我来分析一下,js是自上而下的执行顺序,所以我们这边 for和console属于同步,所以我们这边先是执行for循环是0,1,2,3,4 当i=5的时候是退出for 循环 所以最后的i输出的是 5。
function timer() {
for(var i=0;i<5;i++){
setTimeout(function () {
console.log(i);
})
}
}
timer();
这个是一道非常经典的面试题目,我看了非常多的大牛讲解着道题目。但是很多都很透彻!
记得刚刚的口诀
首先一开始函数是不会执行的,虽然是自上而下只有发现了timer()说明调用了这个方法才开始执行函数timer。 这题的关键是settimeout()方法 这个方法是回调,所以是最后执行的。所以console.log(i)中i并不是for循环中的i,当 for循环执行完毕以后 才执行setTimeout 所以是5个5。
然后一般情况我们为了这么输出是1,2,3,4,5
我们可以把for循环中的var变成let。
另外一个方法就是
function timer() {
for(var i=0;i<5;i++){
function a(i) {
setTimeout(function () {
console.log(i);
})
}a(i)
}
}
timer();
另外一题是很相似的
猜猜这个结果是什么 是10个10.说说原因就很简单在JS高级程序设计中讲到