Board logo

标题: JavaScript之变量对象 [打印本页]

作者: look_w    时间: 2019-3-14 19:43     标题: JavaScript之变量对象

概述

JavaScript 的可执行代码,具有执行上下文,而每个上下文包括以下 3 个属性:

    变量对象(variable object, 简称 VO)
    作用域链(scope chain)
    this

变量对象提供了当前环境所需的变量和函数
作用域链用于保证 JS 中变量和函数有序地访问
this 为函数提供了执行者对象

一个上下文的执行周期可以用下图示意:


本文就来介绍执行上下文中的变量对象。

那什么是变量对象呢?先看定义:

    变量对象是与执行上下文相关的数据作用域,用于存储执行上下文中的变量和函数声明。

不同的执行上下文,变量对象会有一些差别。接下来就分别针对不同的上下文讨论其区别。
一、全局上下文

    全局对象(Global object) 是在进入任何执行上下文之前就已经创建了的对象;
    这个对象只存在一份,它的属性在程序中任何地方都可以访问,全局对象的生命周期终止于程序退出那一刻。

在全局代码的上下文执行环境中,变量对象就是全局对象,在浏览器中,就是 window 对象。

此时,我们可以用 this 和 self 来访问到全局对象,也就是它本身

    console.log(this)  // window
    console.log(self)  // window

其次,全局对象初始创建阶段将 Math、String、Date、parseInt 等函数作为自身方法,还会把全局变量作为自己的属性。

用伪代码表示就是:

    global = {
        Math: <...>
        Date: <...>
        window: global  // 引用自身
    }




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0