for循环中let,var 的经典面试题:for循环中 console.log(i)详解 - Go语言中文社区

for循环中let,var 的经典面试题:for循环中 console.log(i)详解


同学们在刚准备面试时肯定见过一道经典面试题:

for(var i = 0; i < 10; i++) {
	setTimeOut(function(){
		console.log(i)
	})
}
// 输出 10 10 10 10 10 10 10 10 10 10

for(let i = 0; i < 10; i++) {
	setTimeOut(function(){
		console.log(i)
	})
}
// 输出 0 1 2 3 4 5 6 7 8 9

有的同学就很疑惑,怎么肥事,这不一样嘛!

在这里插入图片描述
然后就去百度查查
在这里插入图片描述
然后百度就会告诉你:

第一个变量i是用var声明的,在全局范围内有效,所以全局中只有一个变量i,每次循环时,setTimeOut定时器里指的是全局变量i,而循环里的十个setTimeOut是在循环结束后才执行,所以输出十个10。
第二个变量i是用let声明的,当前的i
只在本轮循环中有效,每次循环的i其实都是一个新的变量,所以setTImeOut定时器的里面的i其实不是同一变量,所以输出0123456789

看完以后
在这里插入图片描述
似懂非懂

就算使用var定义的i是全局变量,每次循环都改变全局范围里的i的值,但是循环一次,执行一次setTimeOut啊,不也应该输出当前i值吗?

em…

不管,面试官问我我就照着这么回答就行了,面试官肯定明白我说的什么
在这里插入图片描述
其实之前我理解的也是很片面的,直到这两天看见一篇Google大佬的文章,全是英文,看了好半天****,下面

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43816287/article/details/109244107
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-04-11 14:25:23
  • 阅读 ( 1286 )
  • 分类:面试题

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢