JS中的全局对象

本文深入探讨JavaScript中的全局对象,包括其在不同环境下的表现形式、提供的核心功能以及如何通过全局对象进行变量声明与函数调用。
js运行时内置了一个Global对象

这个Global对象跟运行环境有关。在浏览器运行环境中。Global就是window对象。
在nodejs中。Global对象是global对象。

当你在浏览器环境中,直接使用一个未经定义的变量,
例如foo=123;那么foo这个变量自动声明为全局变量。变量引用自动挂载到了Global对象,即window对象上。

Global对象上的属性和函数都是js运行时提供的。例如escape\encodeURIComponent\decodeURIComponent\Regex\Infinite等等。。。

跟继承没有关系,你可以认为浏览器默认提供给你使用的对象,都放到了Global对象中,而window对象又恰好就是这个Global对象。实际上,在浏览器的内部实现中,隐藏了真正的Global对象,而把window对象作为了Global对象的替身。一切对Global对象的操作(间接操作),都会映射到window对象上,反之亦然。这样window对象就成了Global对象的替身。而window对象同时又作为Global对象的一个属性。这样,真正的Global对象就被隐藏了。

window对象虽然是浏览器环境下的js Gloabl对象。但并不意味着window对象下的所有方法和属性都是js原生提供的。原生对象只有很少一部分,浏览器环境中,大量的功能都是由宿主对象完成的。

转载自:http://zhidao.baidu.com/link?url=qTTR8X9iTqMskdBZkJafkaN0WeBhouqIe6QePPz2w3dRescyeZNibREeGXGz4Qe_NJeLdl2LEOWuw9ixW-0-NH0WbaytQy73D5oTygWdVzS


对于任何JavaScript程序,当程序开始运行时,JavaScript解释器都会初始化一个全局对象以供程序使用。这个JavaScript自身提供的全局对象的功能包括:

1.全局对象拥有一些常用的属性值。比如undefined、Infinity以及NaN。
2.全局对象拥有一些常用的属性对象。比如Math、JSON和Number对象均为该全局对象的属性。
3.全局对象提供一些全局函数供调用。比如isNaN()、isFinite()、parseInt()和eval()等。
4.全局对象提供一些全局构造器(constructor),也即全局类。比如Date()、RegExp()、String()、Object()和Array()等。


除了JS全局对象,对于运行在浏览器端的JavaScript程序,还有另一个全局对象:window。window全局对象提供了与当前窗口、页面有关的诸多属性与方法。除了这些与浏览器有关的全局属性和方法,window对象还封装了JS全局对象,并向外暴露JS全局对象的属性与接口;因此,当进行浏览器端JavaScript编程时,只需关心window全局对象即可。

对于JavaScript程序中的this,如果this不属于任何function,那么这个this就指代JS全局对象;如果是浏览器端运行的JS程序,那么这个this就指代window全局对象。

如果这个this属于某个function,那么this指代的就是调用该function的对象。若这种情况下function只是一个普通的函数,而不是某个类的方法,那么this的指代存在两种可能:

1.在ECMAScript 3标准,以及ECMAScript 5标准的非严格模式下,this指代全局对象。
2.在ECMAScript 5标准的严格模式下,this指代undefined。

根据这一特性,可以使用以下代码来判断当前是否处于严格模式:


复制代码代码如下:

var strict = (function(){return !this;}());


如果在JavaScript程序中创建了全局变量,那么这个全局变量会成为全局对象中的一个属性。

实验


复制代码代码如下:

var a = this;
console.log(a);//window object
console.log(a.outerWidth);//access window object's attribute
console.log(a.isNaN);//access JS global object's attribute

x = "test";
console.log(a.x);//access newly created global variable value

转载自:http://www.jb51.net/article/59283.htm
在 JavaScript 中,定义全局对象有多种方法,以下是详细介绍: ### 在浏览器环境中 在浏览器环境里,全局对象是 `window`。在全局作用域中创建的变量和函数都会成为 `window` 对象的属性和方法。全局作用域在页面打开时创建,关闭时销毁,并且在全局作用域中可以直接使用 `window` 对象 [^1]。 #### 1. 直接在全局作用域创建变量和函数 ```javascript // 创建全局变量 var globalVariable = 'This is a global variable'; // 创建全局函数 function globalFunction() { return 'This is a global function'; } // 验证它们是 window 对象的属性和方法 console.log(window.globalVariable); console.log(window.globalFunction()); ``` #### 2. 直接给 `window` 对象添加属性和方法 ```javascript window.customGlobalObject = { message: 'This is a custom global object', showMessage: function() { return this.message; } }; console.log(window.customGlobalObject.showMessage()); ``` ### 在 Node.js 环境中 在 Node.js 里,每个文件都有自己的模块作用域,没有直接的全局作用域。不过,有一个全局对象 `global`,可以通过它来定义全局对象。当定义一个全局变量时,这个变量同时也会成为全局对象的属性 [^3]。 #### 1. 直接给 `global` 对象添加属性 ```javascript // 在 Node.js 环境中 global.customGlobalVar = 'This is a custom global variable in Node.js'; console.log(global.customGlobalVar); ``` #### 2. 在模块中导出全局对象 虽然不推荐在 Node.js 中使用全局对象,但如果确实需要,可以在一个模块中导出对象,然后在其他模块中引入。 ```javascript // globalModule.js const globalObj = { data: 'Some global data', getData: function() { return this.data; } }; module.exports = globalObj; // main.js const globalObj = require('./globalModule'); console.log(globalObj.getData()); ``` ### 注意事项 - 在浏览器环境中,过度使用全局变量可能会导致命名冲突和代码难以维护。 - 在 Node.js 中,所有用户代码都属于当前模块,不建议在全局作用域中定义太多变量,因为会影响代码的可维护性和可测试性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值