• Global对象和浏览器的window对象


    Global对象是EMCAScript的一个单体内置对象。

    ECMA-262对内置对象的定义是:“由ECMASript实现提供的、不依赖于宿主环境的对象,这些对象在ECMAScript程序执行以前就已经存在了。开发人员不必显式地实例化内置对象,因为它们已经实例化了。

    ECMAScript中的Global对象在某种意义上是作为一个终极的“兜底对象”来定义的,不属于任何其他对象的属性和方法,最终都是它的属性和方法。事实上,没有全局变量和全局函数,所有在全局作用域中定义的属性和函数,都属于Global对象的属性。

    关于Window对象
    ECMASript没有指出如何直接访问Global对象,但Web浏览器都是将这个全局对象作为window对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了window对象的属性了。

    一个全局对象是一个永远存在于 global scopeobject.

    在 JavaScript 中, 有一个永远被定义的全局对象. 在一个 web 浏览器中, 当脚本创建全局变量时, 他们作为该全局对象的成员被创建. (在 Node.js 不是这样.) 全局对象的 interface 取决于脚本在其中运行的执行上下文. 例如:

    • 在Web浏览器中,脚本没有专门作为后台任务启动的任何代码都将Window 作为其全局对象。这是Web上绝大多数的JavaScript代码。
    • Worker 中运行的代码将WorkerGlobalScope 对象作为其全局对象。
    • Node.js 环境下运行的脚本具有一个称为[global](https://nodejs.org/api/globals.html#globals_global) 的对象作为其全局对象。

    总结来说,Global是一个抽象的概念,凡是应用了ECMASript标准的环境都需要一个具象化一个Global对象,这个具象化的对象具有但不限于Global的所有特性。在浏览器中是window,在Worker中是WorkerGlobalScope,在Node.js中则是global。这是角色和演员的关系。
    下面提供一种获得Global对象的方法:

    var global = function(){
        return this;
    }();
    

    在没有给函数明确指明this的值的情况下(无论是通过函数添加为对象的方法,还是通过调用call()或apply()传入作用域),this值等于Global对象。

    感谢阅读!

    参考:https://developer.mozilla.org/zh-CN/docs/Glossary/Global_object

  • 相关阅读:
    若依问题解决(一)
    Java 将两个List转换为流合并List
    后端返回前端文本换行显示,只能在前端再转换
    Java Stream() 流根据对象属性去重
    vue 当前端传回后端,后端使用实体类接收数据显示报错
    js 中 getMonth() 获取的月份比现实少一个月
    vue连个数组对比
    JS链接跳转方法
    ElementUI--表格toggleRowSelection无法选中
    Linux 常用命令
  • 原文地址:https://www.cnblogs.com/liulangbxc/p/14646534.html
Copyright © 2020-2023  润新知