zoukankan      html  css  js  c++  java
  • 疑难点总结

    1.作用域是什么?

    几乎所有编程语言最基本的功能之一,就是能够储存变量当中的值,并且能在之后对这个值进行访问或修改。

    我们需要一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量。

    这套规则被称为作用域  [scope]

    每一个Javascript函数都被表示为对象,它是一个函数实例。它包含我们编程定义的可访问属性,和一系列不能被程序访问,仅供Javascript引擎使用的内部属性,其中一个内部属性是[[Scope]]

    内部[[Scope]]属性包含一个函数被创建的作用域中对象的集合。此集合被称为函数的作用域链,它决定哪些数据可以由函数访问。此函数中作用域链中每个对象被称为一个可变对象,以“键值对”表示。当一个函数创建以后,它的作用域链被填充以这些对象,它们代表创建此函数的环境中可访问的数据。

    变量对象VO,活动对象AO

    2.执行上下文

    对于执行上下文这个抽象的概念,可以归纳为以下几点:

    • 单线程
    • 同步执行
    • 唯一的一个全局上下文
    • 函数的执行上下文的个数没有限制
    • 每次某个函数被调用,就会有个新的执行上下文为其创建,即使是调用的自身函数,也是如此。

    每当调用一个函数时,一个新的执行上下文就会被创建出来。

    然而,在javascript引擎内部,这个上下文的创建过程具体分为两个阶段:

    1. 建立阶段(发生在当调用一个函数时,但是在执行函数体内的具体代码以前)

      • 建立变量,函数,arguments对象,参数

      • 建立作用域链

      • 确定this的值

    2. 代码执行阶段:

    • 变量赋值,函数引用,执行其它代码 

    实际上,可以把执行上下文看做一个对象,其下包含了以上3个属性:

    1
    2
    3
    4
    5
     executionContextObj {
       variableObject/* 函数中的arguments对象, 参数, 内部的变量以及函数声明 */ },
       scopeChain/* variableObject 以及所有父执行上下文中的variableObject */ },
       this{}
     }

    在上下文的建立阶段,先是处理arguments, 参数,接着是函数的声明,最后是变量的声明,因此变量作用域提升。

  • 相关阅读:
    (C/C++学习笔记) 五. 常变量(只读变量)和宏
    (C/C++学习笔记) 四. 运算符
    (C/C++学习笔记) 三. 作用域和可见性
    (C/C++学习笔记) 一. 基础知识
    计算机科学的基本术语及其英语表达
    模块与包
    Python的递归
    内置函数与匿名函数
    装饰器,迭代器,生成器分析
    命名关键字参数,函数对象,嵌套,名称空间与作用域,闭包
  • 原文地址:https://www.cnblogs.com/vervin/p/6558362.html
Copyright © 2011-2022 走看看