alert(i);//报错,i未定义
alert(i);var i = 0;//undefined
alert(i);//报错,i未定义
alert(i);var i = 0;//undefined
在JavaScript中所有在作用域中var声明的变量会自动提升到该作用域的顶部。不过ES6中let声明变量是不存在声明提升的。javascript是单线程的,代码是一块一块的执行的,一块有时候是一条语句,有时候是{}包起来的代码块,有时候是一小块作用域内的代码。在代码块内,会优先把var变量声明不赋值,所以为undefined。
13 回答12.7k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
6 回答812 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
这是因为Javascript并非完全的按顺序解释执行,而是在解释之前会对Javascript进行一次“预编译”,在预编译的过程中,会把定义式的函数优先执行,也会把所有var变量创建,默认值为undefined,以提高程序的执行效率。