javascript作用域和预编译

作用域定义

  • 作用域是指js代码中定义变量的区域
  • 作用域规定了查找变量的方式,确定了当前执行代码对变量的访问权限

作用域又分全局作用域和局部作用域

  • 全局作用域就像所有作用域的祖籍作用域,是所有局部作用域都可以访问到的,包括自己。
  • 局部作用域可以访问的变量的权限只有祖籍作用域和自己的作用域,无法访问到自己内部的局部作用域

静态作用域

静态作用域指的是一段代码,在它执行前就已经确定了它的作用域,意思就是在执行前就确定了它可以应用哪些地方的作用域(变量)

js运行代码的三个步骤

  1. 语法分析
  2. 预编译
  3. 解析执行

语言分析

代码执行前的准备工作
语言分析阶段:准备要执行的一段js代码,检查是否存在语法错误,存在则抛出错误,代码不执行。

预编译

预编译分为全局预编译和局部预编译,全局预编译发生在页面加载完成时执行,而局部预编译发生在函数执行的前一刻

tip: 预编译阶段发生变量声明提升和函数声明提升,没有进行初始化赋值的操作,匿名函数不参与预编译。只有在解析执行阶段才会进行变量初始化赋值

全局预编译的三个步骤
  • 创建GO对象(Global Object) 全局对象。
  • 找变量声明,将变量名作为GO对象的属性名,值为undefined
  • 查找函数声明,作为GO属性名,值赋予函数体function(){}
局部预编译的四个步骤
  • 创建AO对象(Activation Object)
  • 找形参和变量声明,将形参和变量作为AO属性名,值为undefined
  • 将实参和形参相统一
  • 在函数体里面找函数声明作为属性名,值赋予函数体。

tip:函数执行完毕AO销毁

解析执行

  • js引擎执行代码是从上往下一段一段分析执行的。对GO或者AO中属性重新赋值过程
  • 函数执行完毕时,AO销毁。
  • 浏览器关闭时,GO销毁。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值