【JavaScript】JS中的预解析

本文详细介绍了JavaScript引擎在执行代码时的预解析过程,包括变量和函数的提升。重点讲解了变量提升(变量声明提前,赋值不提升)和函数提升(整个函数声明提前)。通过实例分析了函数声明和函数表达式的区别,以及在预解析中它们的行为。同时,讨论了全局和局部作用域中变量的覆盖情况,并提供了相关代码案例进行说明。
摘要由CSDN通过智能技术生成

JavaScript解析器在运行JavaScript代码的时候分为两步:预解析代码执行(按顺序从上到下)。

预解析:js引擎会把js里面所有的varfunction提升到当前作用域的最前面。

  • 预解析分为 变量预解析函数预解析

变量预解析(变量提升):把所有变量声明提升到当前作用域的最前面,不提升赋值操作。

函数预解析(函数提升):把所有函数声明提升到当前作用域的最前面,不调用函数

//函数提升,成功调用
fun();
function fun(){
	console.log(num);
	var num = 20;
}
  • 函数表达式的调用必须写在函数表达式的下面。

匿名函数存在 变量提升 不存在函数声明提升

//这种赋值形式的函数无法提升,var fun在这是定义变量的意思 只能提升var fun;
fun();
var fun = function(){
	console.log(22);
}

举例:

// 案例1
var num = 10;
fun();

function fun(){
    console.log(num);
    var num = 20;
}
// 相当于执行了以下操作,从外到里进行提升
var num;

function fun(){
    var num;
     //【局部变量和全局变量重名会覆盖全局变量】
    console.log(num); //输出undefined,这是函数里面的num
    num = 20;
}
num = 10;
fun();
// 案例2
var a = b = c = 9
// 相当于 var a = 9; b = 9; c = 9;所以这里 b和c直接赋值,没有var声明——当作全局变量看
// 不同于集体声明 var a = 9, b = 9, c = 9;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值