ES6 中 let的在for循环中变量作用域问题的探讨
来源:互联网 发布:python pyqt教程 编辑:程序博客网 时间:2024/05/07 13:34
如果你直接这么运行,那么电脑就卡死了,因为死循环了。
for (var i = 0; i < 3; i++) { var i = 1; console.log(i);}
可是如果你这么写
for (let i = 0; i < 3; i++) { let i = 1; console.log(i);
结果则是:
111
如果你这么写,结果同上
for (var i = 0; i < 3; i++) { let i = 1; console.log(i);}
如果你这么写,会报错
for (let i = 0; i < 3; i++) { var i = 1; console.log(i);} // SyntaxError: Identifier 'i' has already been declared
这是因为let在for循环语句中是父作用域。循环体内部是子作用域。
所以如果我们用let在for循环体内部用i定义变量的话,那么妈妈再也不用担心我敲电脑敲出死机了。
当然如果你在循环体内部直接运用i也是可以的,这样 i 会直接运用到子作用域。
for (let i = 0; i < 3; i++) { console.log(i);}
如果你这么写,也是会报错,因为对于var来讲它是不会区分循环体内部和循环语句的变量作用域的。
for (let i = 0; i < 3; i++) { var i = 0; console.log(i);} // SyntaxError: Identifier 'i' has already been declared
再写个let在块级作用域的例子,我们一起来感受下:
{ let i = 0; if (true) { let i = 2; console.log(i); } console.log(i);}
结果:
20
0 0
- ES6 中 let的在for循环中变量作用域问题的探讨
- 注意for循环中变量的作用域
- 注意for循环中变量的作用域
- 注意for循环中变量的作用域
- js中for循环变量的作用域
- shell循环中变量的作用域问题
- ES6中变量的结构赋值作用
- matlab中for循环的循环变量在循环体中不能改变的问题
- JS中for循环变量作用域
- JS中for循环变量作用域
- vc6中for语句定义的变量的作用域超出for循环的解决办法
- vc6中for语句定义的变量的作用域超出for循环的解决办法
- for初始语句中声明变量的作用域问题
- 在JavaScript ES6中使用let和const定义变量
- 讲解Python中for循环下的索引变量的作用域
- JavaScript的ES6中var、let、const
- es6中let const var的区别
- ES6中var/let/const的区别
- 后缀自动机详解
- BEGIIN
- 设计模式(前言)
- 1003. 我要通过!(20)(java实现)
- 重磅 | 详解深度强化学习,搭建DQN详细指南(附论文)
- ES6 中 let的在for循环中变量作用域问题的探讨
- java从MySQL表中取出数据时报错:java.sql.SQLException: Before start of result set
- 深度 | 深度学习漫游指南:强化学习概览
- 二叉树的创建、先根、中根、后根遍历
- ServletContext
- 红黑树笔记
- java
- 【网易2017内推笔试】小易记单词
- Qt编程入门(2) : 窗口和布局(2)