正在学习ES6的内容,看的是阮一峰老师出的书,看到变量声明那里,关于暂时性死区的内容。这里有一个例子:
var tmp = 123;if (true) { tmp = 'abc'; // ReferenceError:tmp is not defined let tmp; }
看完对这个例子的解析,还是没有解决我的疑问。我不把let的声明放到代码块前面。
我是这么看这个例子的:首先,因为代码中没有函数,所以声明了一个全局的变量tmp并且初始化一个值123。然后进入条件语句之后,再给这个全局变量重新赋值,接着后面声明了一个只在花括号内有效的和全局变量同名的一个变量。最后报错。tmp没有定义,可是明明已经全局声明过tmp了,所以这么报错是因为和局部的块作用域的tmp冲突了。
然后改下代码,换了let变量名:
var tmp = 123;if (true) { tmp = 'abc'; let temp; }// 输出 abc 这来自全局tmp
没有报错,并且输出abc,块作用域的temp不受影响
结论是,代码块内不能声明和全局变量同名的变量?这显然不应该是这样的,有点理不清了。
慕的地8271018
相关分类