js预解析

js的预解析

1、我们js引擎运行分为两步: 预处理 代码执行

  • (1)预解析 时候,会把js代码里面的所有var 和function提升到当前作用域的最前面
  • (2)代码执行 按照代码书写的从上往下执行

2、预解析分为 变量预解析(变量提升) 函数预解析(函数提升)

(1)变量提升 就是把所有的变量声明提升到当前作用域的最前面 【只提升 声明 不提升赋值操作】

console.log(num);    //打印出来是undefine
var num = 10;		//因为把声明var num提升到最上面,但并没赋值,所以打印undefine

(2)函数提升也是同理 把所有函数声明提升到当前作用域最前面【只提升 不调用函数】

fu();
function fu(){		//js预编译会将函数声明提升到作用域最上面,然后再调用函数
	console.log('11');
}

【注意:用关键字声明函数可以提升,但是采取赋值形式就不能进行提升】

(3)还有一种特殊情况

fun();    //报错
var fun = function(){		//把变量var fun提升到代码作用域的最上面
	console.log(22);
}


//相当于执行了以下代码
var fun;
fun();		//这里就直接调用了fun函数,没有给fun定义函数。
fun = function(){
	console.log(22);
}

特殊案例

f1();
console.log(c);
console.log(b);
console.log(a);
function f1(){
//相当于var a = 9 ;b = 9 ;c = 9;
//因为b 和 c直接赋值,没有进行var的声明,因此当作全局变量来看。
	var a=b=c=9;
	console.log(a);
	console.log(b);
	console.log(c);
}

//相当于以下代码
function f1(){
	var a;
    a=b=c=9;
	console.log(a);
	console.log(b);
	console.log(c);
}
f1();
console.log(c); 
console.log(b);
console.log(a);

//    最后输出
//    9   9   9   9   9   undefine
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值