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。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
这是因为Javascript并非完全的按顺序解释执行,而是在解释之前会对Javascript进行一次“预编译”,在预编译的过程中,会把定义式的函数优先执行,也会把所有var变量创建,默认值为undefined,以提高程序的执行效率。