全局对象是属于哪个类的对象
The global object is an object of which class?
我想知道JavaScript中的全局对象是什么,这个对象属于哪个类。
Infinity
、NaN
和undefined
如何成为全局对象的一部分?
变量范围在JavaScript中由一个函数定义,函数可以嵌套在其他函数中。
function foo() {
// new variable scope in here
var a = "a";
function bar() {
// another nested variable scope
var b = "b";
}
bar();
}
foo();
除非有一个默认的"全局"变量范围,它是在程序运行时定义的。它是基本变量作用域,所有函数创建的作用域都嵌套在该作用域中。
那又怎样
每个变量作用域都有一个变量对象(或者更准确地说,是一个"绑定"对象)。它是一个内部对象,您创建的所有局部变量都绑定到该对象。
无法直接访问此变量对象。只能通过声明局部变量(或函数参数,或函数声明)来向其添加属性。并且您只能通过变量名访问属性。
再说一遍,那又怎样
"全局"变量范围是唯一的。它通过在对象上自动定义一个引用回对象本身的属性来公开这个内部变量对象。在浏览器中,特性名为window
。
因为属性被放置在引用回对象的对象上,并且因为对象上的属性成为变量,所以我们现在可以直接访问全局变量对象。
您可以通过观察window.window
属性是对window
变量的相等引用来测试这一点。
alert(window.window === window); // true
因此,我们可以向对象window.foo = "bar";
添加一个属性,它显示为全局变量alert(foo); // "bar"
。
请注意,公开此内部对象的唯一变量作用域是全局作用域。没有一个函数作用域暴露它。
还要注意,ECMAScript规范不要求公开全局变量对象。这取决于执行情况。
没有真正的类,但如果你指的是全局对象的原型链,那么规范没有说太多:
全局对象的[[Prototype]]和[[Class]]内部属性的值取决于实现。
([[Class]]用于例如window.toString()
,以便您可以获得"[object global]"
。)
您提到的三个值是全局对象的属性,例如:
Infinity === window.Infinity; // true (in a browser the global object is window)
不能覆盖这些变量,因此可以将它们视为文字。但实际上,它们是全局对象的属性,因此您可以将它们称为变量("全局变量")。
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 全局对象是属于哪个类的对象
- 如何使用jQuery访问属于函数内部另一个函数的对象的属性
- 如何在Javascript中对属于对象的键中的多个值进行分组
- 获取调用属于其属性或名称空间原型之一的函数的对象
- Java 脚本 eval() 函数属于哪个对象?此外,在调用 eval() 函数时传递执行上下文
- JS:我如何访问一个函数内的变量值,而另一个函数内部的变量值,并且两个函数属于同一个对象
- JavaScript:我可以使用属于同一对象的另一个属性来定义一个对象的属性吗
- 传递属于对象的匿名方法作为参数-Javascript
- 如何在属于Reducer的对象内部合并对象特性
- 有一个CSSStyleDeclaration对象,我可以找到它属于哪个节点
- 如何确定一个对象是否属于某种类型
- 在rails 4中动态显示属于父对象的对象
- 复选框列表,反映我当前选择的对象属于哪个组
- 调用函数属于JS对象
- 属于JavaScript对象原型的回调函数是否可以访问对象成员
- 如何检查对象是否在逻辑上属于数组,JavaScript