tmp,事实上,函数f无论如何变量tmp都会被创建,在预编译阶段,javaScript引擎会将上面的f函数修改成下面这样
函数f执行后,输出结果为undefined,原因就是在于,当使用函数声明时,变量会提升到运行坏境的顶部...,const定义变量,因为它不存在变量提升,所以,变量一定要在声明后使用,否则会报错
console.log(tmp); // ReferenceError
let tmp = 2;
上面的i变量只是用来控制循环...,它会绑定在这个区域内,不会受外部的影响,它会形成自己封闭的作用域,只要在声明之前使用这些定义的变量,就会报错
在代码块内,使用let,const命令声明变量之前,该变量都是不可用的,这称为暂时性死区(...,然后执行i++,因为这条语句试图修改常量,因此抛出错误,如果后续循环不会修改该常量,那么可以使用const声明
比如:for-on或for-of循环中使用const时的行为与使用let一致,如果使用const...使用const定义初始化值变量,那么就会报错,因为常量不能被改变
而for..in,fo..of循环中,let,const都会每次迭代创建一个新的绑定,从而使循环体内创建的函数可以访问到相应迭代的值,而非最后一次迭代后的值