美文网首页
07-1 | 读JavaScript 高程

07-1 | 读JavaScript 高程

作者: cemcoe | 来源:发表于2020-06-04 22:02 被阅读0次

这是第七章函数表达式,这一章涉及函数预编译,闭包,作用域链内容。函数涉及内容繁多。今天来看作用域链。

06-2 | 读JavaScript 高程 中讲了原型链。

今天来看一看作用域链。

那么什么是作用域?

函数是对象,那么原型链上的东西可以用到函数身上,同时对于函数还有另外一种链叫做作用域链。

作用域是函数的隐式属性 [[scope]],这个属性中存放了执行期上下文。

执行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象,一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行期上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行期上下文。当函数执行完毕,它所产生的执行期上下文会被销毁。

[[scope]]:每个javascript函数都是一个对象,对象中有些属性我们可以访问,但有些是不可以的,这些仅仅供javascript引擎存取,[[scope]] 就是其中一个。[[scope]] 指通常的作用域,其中存储了执行器上下文的集合。

作用域链:[[scope]] 中存储的执行期上下文对象的集合,这个集合就是链式链接,我们把这种链式链接称为作用域链。

三个概念的关系

原型链的链接处是原型和另一个实例,那么作用域链的链接处是什么?

重点在于上下文对象的集合是如何产生的。

来个例子:

function a() {
  function b() {
    var b = 234
  }
  var a = 123
  b()
}
var glob = 100
a()

有了 07 | 读JavaScript 高程 预编译的知识,来看上面的代码。

产生的GO如下:

GO: {
  this: window,
  window: Object,
  document: Object,
  a: function,
  glob: 100
}

前面说到作用域中存储作用域链。


a函数执行产生AO,AO挂到哪里?挂到作用域链的最顶端。

当在a函数中访问变量时就是按照作用域链查找。

a函数的执行触发了b函数的定义。


b函数执行会创建自己的AO。


这里有一个点,就是b函数定义时用到原型链和a函数用到的原型链是不是同一个,b用的是从a借来的还是自己copy一份?

两者是共用的AO。

总览

这也就是函数里面可以访问外部变量,而在函数外无法访问函数内部变量的原因。

相关文章

  • 07-1 | 读JavaScript 高程

    这是第七章函数表达式,这一章涉及函数预编译,闭包,作用域链内容。函数涉及内容繁多。今天来看作用域链。 在 06-2...

  • 05 | 读JavaScript 高程

    这是第五章引用类型,这一章涉及引用类型的种类,各个类型身上的方法等相关内容。 主要知识点: 1.引用类型和类和对象...

  • 01 | 读 JavaScript 高程

    缘起 总感觉自己前端的知识体系不是很系统,打算读一下这本很多人推荐的书,从目录来看第三版有些东西在2020年可能已...

  • 02 | 读 JavaScript 高程

    今天来瞧一瞧第二章在 HTML中使用 JavaScript script 标签属性的变化 首先是 script 标...

  • 03 | 读JavaScript 高程

    这是第三章基本概念,这一章涉及变量,操作符,语句和函数等相关内容。 主要的知识点: ECMAScript 中究竟有...

  • 06 | 读JavaScript 高程

    这是第六章面向对象的程序设计,这一章涉及到一些概念和思想,也是 JavaScript 中很重要的知识点。需要注意的...

  • 04 | 读JavaScript 高程

    这是第四章基本概念,这一章涉及变量、作用域和内存问题等相关内容。主要知识点: 值类型和引用类型的区别是什么? 如何...

  • 08 | 读JavaScript 高程

    这一篇呢是第8章,主要涉及 BOM 的相关知识。 先来看BOM,即和浏览器相关地一些东西。 知识点:1.BOM 中...

  • 07 | 读JavaScript 高程

    这是第七章函数表达式,这一章涉及函数预编译,闭包,作用域链内容。函数涉及内容繁多。 前情提要 02-1 | 读Ja...

  • 13 | 读JavaScript 高程 | 事件

    这一篇呢是第13章,内容是和事件相关。 事件可以看成是条件判断的一种条件,逻辑是某个元素发生了某个事情,我要做出相...

网友评论

      本文标题:07-1 | 读JavaScript 高程

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