1问:
cinsole.log(num);//报错
2问:
console.log(num);//undefined ??
var num=10;
3问:
fn();
function fn(){
console.log(11);//11
}
4问:
fun();
var fun=function(){
console.log(12);//报错 ??
}
1、Js 引擎运行Js分为两步:预解析 执行代码 (1)预解析Js引擎会把Js里面所有的var 还有function提升到当前作用域的最前面
(2)代码执行 按照代码书写的顺序从上往下执行
2、预解析分为变量预解析(变量提升)和函数预解析(函数提升)
(1)变量提升 就是把所有的变量声明提升到当前作用域的最前面 不提升赋值操作
(2)函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
所以:
2问相当于执行了以下代码:
var num;
console.log(num);
num=10;
4问相当于执行了以下代码:
var fun;
fun();
fun=function(){
console.log(22);
}
3问相当于执行了以下代码:
function fn(){
console.log(11);
}
fn();
案例
f1();
console.log(c);
console.log(b);
cnsole.log(a);
function f1(){
var a=b=c=9;//相当于var a=9; b=9; c=9 b和c是全局变量
console.log(a);
console.log(b);
console.log(c);
}
相当于以下代码:
function f1(){
var a;
a=b=c=9;//此时bc直接赋值 是全局变量
console.log(a);//9
console.log(b);//9
console.log(c);//9
}
f1():
console.log(c);//9
console.log(b);//9
console.loh(a);//报错