前言
众所周知,在《权威指南》和《JavaScript高级程序设计 第三版》都明确写了在JS中的{}只是单纯的代码块,而不存在块级作用域。但是ES6出现之后,我对for循环的底层细节有一些小小的困惑。今天就来简单说一说哈~
由于ES6有了let
这样的关键字,我对JS底层的实现(比如编译什么的)感觉有些细思极恐。所以大胆猜测一下:
看到这肯定有人骂我智障了,但是大神先别急,来看下面这几段代码:
通过这几个例子很容易发现:let将花括号转化为作用域,就可以得到想要的结果
第二个例子中的立即执行函数虽然形成了自己的作用域,但是并没有什么卵用,因为它自己里面没有 i,所以还是要使用外面的 i,而外面的 i都是一样的,也就是6;
第三个例子使用了中间变量,而且使用了立即执行函数,所以形成了自己的独立作用域;
第四个例子在立即执行函数中使用了
let
,把for循环的代码块(我自己YY的)转化成了真正的块级作用域;第五个例子直接在for循环中庸let定义循环变量,也形成了自己的独立作用域。
反正我是说服了自己,不过话说回来这些本来也不重要吧,毕竟该怎么写还是怎么写。今天废话就说到这了~