ES6学习--global 对象

本文探讨了在不同环境中,如浏览器、Web Worker和Node.js中,全局对象的差异。在ES5中,顶层对象window在浏览器中,而Web Worker使用self,Node.js则为global。介绍了在Web Worker中self的特殊意义,以及在Node.js中global对象的API。同时,讨论了通过this获取顶层对象的局限性,并提到了CSP对eval和new Function的影响。最后,提出了一种跨环境获取global对象的解决方案。
摘要由CSDN通过智能技术生成

在ES5 中,顶层对象的“本身”在各种实现里面是不统一的。比如:

  • 浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window。

    大家都知道JavaScript 语言采用的是单线程模型,Web Worker 就是用来为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。除了window对象,Web Worker线程也无法使用document、parent这些对象。但是,Worker 线程可以使用navigator对象和location对象。
    更多Web Worker知识可参考:Web Worker 使用教程

  • 浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self。

    我们在打开任何一个网页时,浏览器都会创建一个窗口,这个窗口就是一个window对象,也是我们在js里说的全局对象或全局作用域对象。self 也是指窗口本身,它返回的对象跟window对象是一样的,也就是当前 window 对象的引用,但是self 属性是只读的。self语法可以self或者window.self,所以window、self、window.self 是等价的:

    self === window // true
    self === window.self // true
    self.window === self // true
    self === window.self.self // true
    self 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值