JS笔记 ( 四 ) JS 的运行和作用域


博主的 Github 地址


1. JS 的运行

JS 的运行分为 3 步

(1) 语法分析
(2) 预编译
(3) 解释执行

 
 

预编译
  • 在预编译的时候:
    (1) 函数声明整体提升
    (2) 变量声明提升

  • 注意的细节
    (1) imply global 暗示全局变量: 即任何变量, 如果变量未经声明就进行赋值, 此变量就归全局所有
    (2) 一切声明的全局变量, 都是 window 属性

  • 预编译的过程:
    (1) 创建 AO 对象, 即局部变量表 ( 全局则生成 GO 对象, 即全局变量表 )
    (2) 找形参和变量声明, 将变量和形参名作为 AO 对象的属性名, 值为 undefined
    (3) 将实参值和形参统一
    (4) 在函数体里面找函数声明, 值赋予函数体

 
 
 

2. 作用域

  • [[scope]] 指的是作用域, 其中存储了运行上下文的集合, 而且该属性是隐式属性, 不可被调用
     
  • 运行期上下文:
    当函数执行时, 会创建一个成为执行期上下文的对象.
    一个执行期上下文定义了一个函数执行期时的环境,
    函数每次执行都会创建一个执行期上下文, 执行完毕之后销毁,
    AO 和 GO 就是执行期上下文.

     
  • 查找变量:
    a 在定义出来后在作用域链中存入 GO
    a 在执行时会在作用域链首位放入 AO
    变量现在 AO 中寻找, 找不到该变量后才回去 GO 中寻找
    即, 函数内部的局部变量比函数外的全局同名变量在函数体中调用时优先级更高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值