js的预编译

函数执行前函数究竟做了什么?
一。 函数执行前,首先会通篇检查有没有语法或者代码写错的,如果有就直接报错,如果没有就会进行下一步:
二。 函数的预编译阶段
1. 首先会在函数内生成一个Ao对象,
2. 变量或者形参作为函数的属性名或者键名属性值是undefined
3. 实参给形参
4. 函数声明作为属性值,属性名为funciont(){}函数体

三。执行JS代码

作用域链

作用域链:当函数执行时会生成AO对象,并且把这个AO对象放在[[scope]]的最顶端,和函数创建时的环境,形成链式结构,我们把这种链式结构叫做作用域链。

作用域链 = 函数执行时的Ao对象+ 函数创建时的环境

 这句话说白了就是当一个函数 **执行** 之后首先从自己本身里面找所需要的变量,注意,是执行之后,如果没有执行这个函数就相当于是一个死的函数,自己就不存在什么Ao对象了。

里面写什么都不会报错,如果自己里面没有所需要的变量,就顺着自己的父级去找,而自己所处的环境就是父级函数创建时候的Ao

变量查找规则: 沿着作用域链顶端 自上而下寻找变量

在这里插入图片描述
此时的[[scopes]]此时就是我们常说的作用域,其中存储了Ao对象的集合

Go对象:
函数预编译阶段也会也有Go对象,Go对象也可以当作是window对象吧,
也就是说当页面打开时候就会产生Go对象,页面中的函数都处于Go中

Go的执行有三个步骤
1.生成Ao对象
2.变量作为Go对象的属性名或键名
3.函数声明作为属性名,属性值为函数体
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值