经典面试题之JavaScript for循环(var let)
如果你也在面试找工作,那么也一定遇到过这道for循环打印结果的题,下面我们来探讨下
var循环
for(var i = 0; i < 10; i++) {
setTimeout(function(){console.log(i)});
}先把答案写出来

下面来讲一下原因:
划重点
① var
②setTimeout()
重点1:你需要了解一下变量提升(hoisting)
var变量声明,无论发生在何处,都在执行任何代码之前进行处理。
用var声明的变量的作用域是它当前的执行上下文,它可以是嵌套的函数,也可以是声明在任何函数外的变量。如果你重新声明一个 JavaScript 变量,它将不会丢失其值。
然后上面的代码其实是这样的
var i = 0;
for (; i < 10; i++) {
setTimeout(function () {
console.log(i)
})
}重点2、setTimeout()
它总是在当前的同步代码执行完成后开始运行。(出自简书---一斤代码)
可以加入log进行跟踪验证:、
var i = 0;
for (; i < 10; i++) {
console.log('+++++', i)
setTimeout(function () {
console.log(i)
})
}执行结果:
+++++ 0
+++++ 1
+++++ 2
+++++ 3
+++++ 4
+++++ 5
+++++ 6
+++++ 7
+++++ 8
+++++ 9
10
10
10
10
10
10
10
10
10
10
由此可见,当开始执行setTimeout()中的代码时for循环外面的变量i就已经变成了10,使用console.log(i)从作用域查找到的i值就是10,然后循环十次10。
let循环
ES6的let/const,简单来说let/const是声明块级作用域的变量
for(let i = 0; i < 10; i++) {
setTimeout(function(){console.log(i)});
}下面是打印结果:

到此这篇关于经典面试题之JavaScript for循环(var let)的文章就介绍到这了,更多相关js for循环内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
javascript中使用replaceAll()函数实现字符替换的方法
第一次发现JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符.2010-12-12
使用 JScript 创建 .exe 或 .dll 文件的方法
JScript 是由微软开发的活动脚本语言,基于 ECMAScript 规范实现。Internet Explorer 中的 JavaScript,实际上是指 JScript。2011-07-07
详细介绍适用于小程序的jsEncrypt.js与jsencrypt.min.js加密库
jsencrypt.min.js是一个JavaScript库,它允许开发者在前端实现RSA加密和解密操作,而无需深入理解加密算法的底层实现,这篇文章主要介绍了适用于小程序的jsEncrypt.js与jsencrypt.min.js加密库的相关资料,需要的朋友可以参考下2025-10-10


最新评论