JavaScript预解析

JavaScript运行

js引擎运行js会分为两步:预解析和代码执行。
预解析:js引擎会把js里所有的var和function提升到当前作用域的最前面。
代码执行:按照代码书写的顺序从上往下执行。

预解析

预解析分为变量预解析(变量提升)和函数预解析(函数提升)。

1.所有的声明都会提升到作用域的最顶上去。
2.同一个变量只会声明一次,其他的会被忽略掉或者覆盖掉。
3.函数声明的优先级高于变量声明的优先级,并且函数声明和函数定义的部分一起被提升。

变量提升

将所有变量声明提升到当前作用域的最前面,不提升赋值操作。

案例1

fun();  //报错,函数不存在
var fun=function(){
	console.log(1);
};
变量提升,相当于
var fun;
fun(); 
fun=function(){
	console.log(1);
};

案例2

function a(){
	console.log(c);    
	var c=2;					
}									
a();  //undefined    局部块中变量提升到局部块上方
相当于
function a(){
	var c;	
	console.log(c);
	c=2;
}				

函数提升

把所有的函数声明(关键字声明)提升到当前作用域的最前面。

案例1

fn();
function fn(){
	console.log(11);
};
函数提升,相当于
function fn(){
	console.log(11);
};   //将函数声明提升到当前作用域最前面
fn();

案例2

var num=10;
fun();
function fun(){
	console.log(num);
	var num=20;
}
相当于
var num;
function fun(){
	var num;
	console.log(num);   //undefined
	num=20;
}
num=10;
fun();

案例3

f1();
console.log(c);
console.log(b);
console.log(a);
function f1(){
	var a=b=c=9;   //var a=9; b=9; c=9; 集体声明 ,b和c没有var声明。当做全局变量看
	console.log(a);
	console.log(b);
	console.log(c);
}
相当于
function f1(){
	var a;  //变量提升
	a=b=c=9;
	console.log(a);  //9
	console.log(b);  //9
	console.log(c);  //9
}   //函数提升
f1();
console.log(c);  //9  
console.log(b); //9 c和b为全局变量
console.log(a); //报错,在全局中未被定义
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值