概述
JavaScript代码是由浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行JavaScript代码时候分为两步:预解析和代码执行
- 我们js引擎运行js 分为两步: 预解析和 代码执行
(1) 预解析:js引擎会把js里面所有的 var 还有 function提升到当前作用域的最前面
(2) 代码执行:按照代码书写的顺序从上往下执行 - 预解析分为
变量预解析
(变量提升)和函数预解析
(函数提升)
(1)变量提升:就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作
(2)函数提升:就是把所有的函数声明提升到当前作用域的最前面,不调用函数 - 函数表达式调用必须写在函数表达式的下面
案例
1、结果是多少?
//案例1
var num = 10;
fun();
function fun (){
console.log(num);
var num = 20;
}
//相当于执行了以下的操作
var num;
function fun (){
var num;
console.log(num);
num = 20;
}
num = 10;
fun();
2、结果是多少?
var num = 10;
function fun (){
console.log(num);
var num = 20;
console.log(num);
}
fun();
//相当于以下代码
var num;
function fun (){
var num
console.log(num);
num = 20;
console.log(num);
}
num = 10;
fun();
3、结果是多少?
f1();
console.log(c);
console.log(b);
console.log(a);
function f1 (){
var a=b=c=9;
console.log(a);
console.log(b);
console.log(c);
}
//相当于以下代码
function f1 (){
var a;
a = b = c = 9;
//相当于 var a=9; b=9; c=9; b和c直接赋值前面 没有var声明 当全局变量看
console.log(a); //9
console.log(b); //9
console.log(c); //9
}
f1();
console.log(c); //9
console.log(b); //9
console.log(a); //打印报错 函数中的 var a 为局部变量无法打印