alert(i);//报错,i未定义
alert(i);var i = 0;//undefined
变量提升
es6 用let关键字可以解除这种烦恼
归根究底是 js太不规范了,坑太多
alert(i);var i = 0;
是
var i;
alert(i);
i = 0;
变量提升 看下相关资料就知道了
这是因为Javascript并非完全的按顺序解释执行,而是在解释之前会对Javascript进行一次“预编译”,在预编译的过程中,会把定义式的函数优先执行,也会把所有var变量创建,默认值为undefined,以提高程序的执行效率。
是变量提升在做鬼。
es6引入了块作用域,使用let代替var做变量声明,就不会有变量提升了。
在js中,会变量提升,然后按顺序执行;
alert(i);var i=0;
其实等价于
var i;
alert(i);
i=0;
在JavaScript中所有在作用域中var声明的变量会自动提升到该作用域的顶部。不过ES6中let声明变量是不存在声明提升的。javascript是单线程的,代码是一块一块的执行的,一块有时候是一条语句,有时候是{}包起来的代码块,有时候是一小块作用域内的代码。在代码块内,会优先把var变量声明不赋值,所以为undefined。