作用域和作用域链

变量作用域

  • 一个变量的作用域是程序代码中定义这个变量的区域 - 全局变量拥有全局作用域,也就是说在JavaScript代码中的任何地方都有定义 - 局部变量:在函数内声明的变量只在函数体内有定义,他们叫局部变量,函数的参数也是局部变量,他们只在函数体内有定义 - 在函数中,局部变量的优先级高于同名的全局变量
  • 函数作用域 - JavaScript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的

    • 一段代码块在浏览器中执行会进行预编译环节,在预编译中有四部曲 1.创建AO对象 2.找形参和变量声明,将变量和形参作为AO属性名值为undefined 3将形参和实参值进行统一 4在函数踢里找函数声明,值赋值为函数体 - 每一个函数也是对象,都有一个隐士的属性scope,scope中存着GO和AO,一个函数在执行前会产生一个GO也就是全局作用和AO也就是局部作用域例如一个函数A中有函数B函数B中有函数C函数C中有函数D,在这样的函数体中A执行前会产生一个GO和AO,GO中存放的是window中声明的变量,AO是函数当前预编译产生的对象,如A中函数中scope存在的第0位是A的AO,第1位是A的GO,B函数中scope第0为是B的AO,第1位是A的AO,第2位是GO,C函数中scope第0为是C的AO,第1位是B的AO,第2位是A的AO,第3位是GO,D函数中scope第0位是D的AO,第1位是C的AO,第2位是B的AO,第3为是A的AO,第4为是GO, - 每当函数执行时都是从当前函数的顶端开始访问 像这种作用域程一个链表展示这就是作用域链
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值