JavaScript全局对象与全局作用域

7
  1. 在Web浏览器中,哪个对象是全局对象?
  2. 全局作用域是由全局对象提供的作用域吗?如果不是,那么全局作用域在哪里找到?
3个回答

5

在浏览器环境中,Window 被认为是全局范围。

window 对象实现了 Window 接口,该接口继承自 AbstractView 接口。
一些附加的全局函数、命名空间对象、接口和构造函数,通常与 window 不相关,但可用于它,列在 JavaScript 参考和 DOM 参考中。

window 对象表示窗口本身。
window 的 document 属性指向加载在该窗口中的 DOM 文档。
可以使用 document.defaultView 属性获取给定文档的窗口。

在选项卡式浏览器(如 Firefox)中,每个选项卡都包含自己的 window 对象(如果您正在编写扩展,则浏览器窗口本身也是一个单独的窗口)。
也就是说,window 对象不在同一窗口的选项卡之间共享。一些方法,即 window.resizeTo 和 window.resizeBy 应用于整个窗口而不是窗口对象所属的特定选项卡。通常,任何不能合理地涉及选项卡的事情都涉及窗口。


3
  1. 全局对象被称为window
  2. 是的,全局作用域由window提供,因此您可以使用window.variable获取任何全局变量。

1

这真是一个好问题。我自己也思考了一段时间。以下是我的想法。 确实存在全局对象和全局作用域,但是全局作用域是虚拟的,并且是全局对象的活镜像(即全局对象中存在的任何属性都以变量形式存在于全局函数/作用域中)。在全局作用域上进行的任何更新都是对全局对象进行更新(例如,如果您创建了全局变量,则该变量将添加到全局作用域和全局对象中)。酷毙的是:当创建或调用全局作用域时,传递给它的上下文实际上就是全局对象。

这是JavaScript中不存在在函数外执行的代码的核心证明。有人认为顶层代码和内联脚本实际上不在函数内执行,但这是不正确的,因为要创建全局作用域,必须调用全局函数,这意味着任何顶层代码都必须在该全局函数内运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接