JavaScript中top === self是否始终为真?Web Worker能否使用top?
关于
self、top和window的常见疑问解答 好问题!咱们一步步拆解你遇到的这些疑惑:
1. 为什么普通页面里self === top会返回true?
在没有嵌套iframe的常规浏览器页面中:
self其实是window对象的别名,和window.self完全等价,本质就是当前页面的全局window对象。top指向的是浏览器最顶层的根窗口对象。如果你的页面没有被嵌入任何iframe里,当前窗口就是最顶层窗口,那top自然和当前的self(也就是window)指向同一个对象,这时候判断self === top就会返回true。
举个反例:如果你的页面被嵌套在父窗口的iframe里,那在当前页面的上下文里,self指向自身的window,而top指向父窗口的window,这时候self === top就会是false。
2. top是否始终和self一样指向window?
当然不是!只有当当前页面是最顶层窗口(没有被iframe嵌套)时,二者才指向同一个window对象。一旦页面处于iframe嵌套结构中,top会固定指向最外层的根窗口,而self始终指向当前页面自身的window,这时候它们就是完全不同的对象了。
3. Web Worker中能使用top吗?
不行哦。Web Worker运行在独立的全局上下文里,这个上下文和浏览器窗口的上下文完全隔离——像window、document、top这些和页面窗口相关的对象都不存在。在Worker里,self指向的是Worker自身的全局对象(WorkerGlobalScope),而非浏览器的window。
如果在Web Worker里尝试访问top,会直接抛出ReferenceError,因为这个变量根本不存在于Worker的全局环境中。
内容的提问来源于stack exchange,提问作者Srinivas
相关产品推荐
相关产品推荐

