美文网首页
关于JS作用域链

关于JS作用域链

作者: jrg_tzc | 来源:发表于2018-03-29 09:25 被阅读0次

执行上下文

JavaScript引擎并不是一行一行的分析代码,而是一段一段的。在代码运行之前会进行内存分配,代码上下文关联的准备。我把这理解成执行上下文。
上下文主要有三个属性

activeExecutionContext == {
  VO : {...},  // or AO
  this: thisValue,
  Scope: [...]
}

其中VO或AO是变量对象,this为this指针,scope便为作用域链。

作用域链

每个上下文都有自己的变量对象。作用域链便是上下文中所有变量对象的列表,与执行上下文相关。可用于在标识符解析中变量查找。
举个例子,当这段代码执行时

var x = 10;
bar() 
function bar(){
  var x = 30;
  function foo(){
    console.log(x) 
  }
  foo();
}

全局上下文的变量对象是:

globalContext.VO == {
  x: 10
  bar: <reference to function>
}

bar被调用后的上下文活动对象:

barContext.AO == {
  x: 30
  foo: <reference to function>
}

bar的上下文作用域链便为:

barContext.Scope == [
  barContext.AO,
  globalContext.VO
]

而接着foo被调用后其作用域链便为

fooContext.Scope == [
  fooContext.AO,
  barContext.AO,
  globalContext.VO
]

当解析a标识符时,便依据作用域链去查找。

  fooContext.AO   // not found
  barContext.AO  //  found - 30
  globalContext.VO 

在bar的变量对象中找到30,便停止查找,返回30.

相关文章

  • 干货!月薪80k前端大佬面试笔记:JS闭包解析!

    三点注意事项 JS没有块级作用域,只有全局作用域和局部作用域(函数作用域)。 JS中的作用域链,内部的作用域可以访...

  • JS 作用域链、导入导出

    1. JS 的作用域链 作用域在 JS 中表示变量的可访问性和可见性。JS 作用域有 3 种:1. 全局作用域;2...

  • 现阶段对于前端成长的困惑

    js权威指南,关于作用域链,全局作用域,函数作用域,基本已经全部了解了。闭包,原型继承,借用函数也很了解了,一些设...

  • 闭包

    一、理解闭包前js基础1、作用域链(作用域、作用域链中有说)。2、js的内存回收机制。一个函数在执行开始的时候,会...

  • 作用域和作用链

    关键词:作用域作用链 作用域 js中没有块级作用域 全局作用域,函数作用域太简单,就不演示(≧▽≦)/啦啦啦 作用...

  • 关于JS作用域链

    执行上下文 JavaScript引擎并不是一行一行的分析代码,而是一段一段的。在代码运行之前会进行内存分配,代码上...

  • 2018-12-18

    JS高级 作用域&作用域链 作用域: 1.作用域的个数:n(函数声明的个数)+1(全局作用域)2.作用域不会存储变...

  • 浅谈JS作用域链

    浅谈JS作用域链 作用域 作用域(scope)就是变量访问规则的有效范围。作用域外,无法引用作用域内的变量;离开作...

  • JS博客

    JS构造函数及new运算符 JS原型对象和原型链 函数作用域和作用域链 干货分享:让你分分钟学会JS闭包 深入理解...

  • JS进阶系列

    在JS入门难点解析系列中,我们对JS的一些重要概念,比如:作用域,作用域链,原型,原型链,继承,活动对象,this...

网友评论

      本文标题:关于JS作用域链

      本文链接:https://www.haomeiwen.com/subject/blfucftx.html