1、预解析
先看几个例子:
//1问
console.log(num); //会报错
//2问
console.log(num); //undefined
var num = 10;
//相当于执行了以下代码
//var num;
//console.log(num);
//num = 10;
//3问
fn();
function fn() {
console.log(11);
}
//可以调用,输出11
//相当于执行了以下代码
function fn() {
console.log(11);
}
fn();
//4问
fun();
var fun = function() {
console.log(22);
}
//TypeError: fun is not a function
//相当于执行了以下代码
// var fun;
// fun();
// var fun = function() {
// console.log(22);
// }
//匿名函数调用必须写在后面
- JavaScript代码是由浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行JavaScript代码的时候分为两步:预解析和代码执行。
1.1 预解析
js引擎会把js里面所有的var和function提升到当前作用域的最前面。
- 变量预解析(变量提升):就是把所有的变量声明提升到作用域的最前面,注意只提升声明,不提升赋值
- 函数预解析(函数提升):函数提升不会调用函数。函数表达式调用必须写在函数表达式下面
1.2 代码执行
按照代码书写顺序从上往下依次执行
1.3 案例:
结果是几? ——结果是undefined
<script>
var num = 10;
fun