一段代码看出JS的的解析到执行的顺序规则

一段代码看出JS的的解析到执行的顺序规则

代码

function bar(a, b) {
    b = 3;
    var b;
    function b(){}
    console.log(a); // 打印出:10
    console.log(b); // 打印出:3
    return function a(){};
}

bar(10);

执行顺序

函数外面的时候,代码拆成前后两部分来看:

第 1 部分:(申明)
  • 1、申明了一个bar=undefined的函数变量,用代码可以看成:(VO是执行上下文,可以看成是this

VO = {bar:undefined}
第 2 部分:(执行)
  • 2、执行bar(10)这里由于是函数,存在独立作用域,只要存在作用域就先解析,所以这里又可以拆成两部分来看:
第 2.1 部分:(申明)
  • 先声明a=10,b=undefined两个形参变量,再申明函数变量b=function b(){},由于上下文VO1中已经存在 b 了,所以会覆盖掉形参b的申明,然后再申明var变量b=undefined,并覆盖已经存在VO1中函数变量b,用代码表示:
VO1 = {a:10,b:undefined}

注意:这里需要注意的是函数表达式return function a(){}并不会提前申明,函数表达式函数申明的异同是,除了标准的函数申明function a(){},其他的都是函数表达式,如:var a = function (){}(function a(){})...等。
注意:申明的权重:argument(函数的形参申明) > function声明 > var声明 (也就之前提高的变量提升Hoisting)

第 2.2 部分:(执行)
  • 先执行b=3,再执行两个console.log,再执行:函数表达式申明,及执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值