美文网首页
作用域链的理解

作用域链的理解

作者: smoook | 来源:发表于2019-12-27 14:36 被阅读0次

作用域链的理解

1可以把作用域链理解成是一个栈结构;

2每个作用域都有一个作用域对象用于保存在该作用域内创建的变量(包括函数),其保存的方式是:在作用域内创建的变量会成为作用域对象的属性;

3作用链链保存的是各级作用域对象的引用,其中最近的作用域的作用域对象在最前端,越远的作用域的作用域对象越靠后;

4全局作用域的作用域对象是全局对象本身;所以,每个作用域链的最后端都是全局对象的引用;

5在全局作用域内创建的变量会成为全局对象的属性的原因:由于2(在作用域内创建的变量会成为作用域对象的属性)和4(全局作用域的作用域对象是全局对象本身),所以在全局作用域创建的变量会成为全局对象的属性;

6函数的作用域链是在函数对象被创建时(被定义时)创建的;

7每当函数被执行时,都会新创建一个函数的作用域对象,并把该作用域对象推到作用域链的最前端;

8每当函数执行结束时,都会把函数的作用域对象从该函数作用链中推出;

闭包的本质

其实闭包携带外部变量的机制并非闭包的特有机制,它是函数的作用域链的一个效应;在JavaScript中,闭包和普通函数没有任何本质的区别,闭包只是函数在某种使用场景下的一个名字,就好比凶器只是刀在用于行凶时的名字;

JavaScript中的闭包能携带外部变量的原因是:

JavaScript的函数在被创建时(被定义时)会生成自己的作用域链;该作用域链会保存各级作用域对象的引用,所以JavaScript的函数能够访问其外部的所有变量;上下文执行栈在创建的时候是一层一层的堆上去的

相关文章

  • javascript基础知识问答-作用域和闭包

    1.理解词法作用域和动态作用域2.理解JavaScript的作用域和作用域链3.理解JavaScript的执行上下...

  • 作用域链的理解

    作用域链的理解 1可以把作用域链理解成是一个栈结构; 2每个作用域都有一个作用域对象用于保存在该作用域内创建的变量...

  • 作用域&js分号的作用

    以上代码输出为: 原因:作用域:执行上下文中包含作用域链在理解作用域链之前,先介绍一下作用域,作用域可以理解为执行...

  • JS_0: 执行环境和作用域链

    JavaScript,目前对于执行环境和作用域链的理解 什么是作用域链? 要讲作用域链就得先讲执行环境。 每个函数...

  • 5分钟入门闭包

    理解闭包前先要理解两个概念:作用域和作用域链。一、作用域分为: 全局作用域 函数作用域 var a = 100 f...

  • 作用域/作用域链 闭包及其使用

    一、作用域、作用域链 作用域(scope) 浅显的理解: 作用域就是变量的可用范围(scope) 为什么要有作用域...

  • JavaScript 函数闭包(colsure)

    理解闭包,你首先必须理解JS的变量作用域,JavaScript作用域和作用域链。 ES6之前,变量的作用域分为全局...

  • 作用域链

    作用域链(scope chain) 理解: 作用域链决定了哪些数据能被函数访问。当一个函数创建后,它的作用域链会被...

  • 作用域链

    什么是作用域链? 在理解什么是作用域链之前,我们需要了解一个概念,那就是作用域。那么什么是作用域呢?简单的说,作用...

  • 面试宝典3

    1、说说你对作用域链的理解 作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问...

网友评论

      本文标题:作用域链的理解

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