Javascript 全局对象和赋值-为什么它能识别赋值?
当我在控制台中运行时,我不太明白为什么它会产生零的结果。我认为MyObject和myFunc都是全局的。为了正确理解这一点,我遗漏了什么概念Javascript 全局对象和赋值-为什么它能识别赋值?,javascript,Javascript,当我在控制台中运行时,我不太明白为什么它会产生零的结果。我认为MyObject和myFunc都是全局的。为了正确理解这一点,我遗漏了什么概念 myObject = { length: 400, }; function myFunc () { return console.log(this.length); } myFunc(myObject.length); // equals zero 它向您显示window.length的值(即文档中的帧数/iframe)。要让myFunc显示传入对
myObject = {
length: 400,
};
function myFunc () {
return console.log(this.length);
}
myFunc(myObject.length); // equals zero
它向您显示
window.length
的值(即文档中的帧数/iframe)。要让myFunc
显示传入对象的length
值,必须使用该参数:
function myFunc (obj) {
return console.log(obj.length);
}
如果您正在尝试探索(您的
myObject
是一个隐式全局对象;它们是一个坏东西(tm)),那么myFunc
应该在没有参数的情况下调用,并且应该使用myObject.length
或者可能使用this.myObject.length
(它们是相同的东西)。您将对象作为参数传递,但是你没有在函数中收到它在myFunc
的上下文中,此
不是对象myObject
。它是窗口
对象
要实现您的目标,请按如下方式修改代码:
myObject = {
length: 400,
};
function myFunc (obj) {
return console.log(obj.length);
}
myFunc(myObject); // equals zero
注意:
要验证this
是否为窗口
对象,请参阅此处,我已将控制台行修改为return console.log(this)代码>。控制台输出窗口
对象
此
指的是长度应为1的窗口
对象。@megawac为什么长度应为1@megawac-Stack似乎出于任何原因将长度设置为1,默认值为0。@TravisJ:这是文档中的帧数/iFrame。因此,对于许多(大多数?)文档来说,它应该是0
,但当然,如果您有一个frame/iframe,它将是1
;第二,它将是2
,以此类推。@T.J.Crowder-啊,还有广告的框架。我没有得到的是当我在控制台上键入“window.myObject.length”时,它确实识别400。这就是我感到困惑的地方。这不意味着myObject是全局的吗?如果是,为什么函数没有实现这一点?@Iditarod1973:是的,你说得很对,myObject
是一个全局对象。但是您没有在myFunc
中使用该全局函数。您试图使用的是length
,而不是myObject.length
。因此,您将得到一个不同的全局值,length
,它与myObject.length
无关myObject.length
不是全局的,它是从全局myObject
引用的对象的属性。Crowder:谢谢!让我再给你检查一次,确定我拿到了。作为一个全局对象,myObject实际上是“window.myObject”,所以当我在“myFunc”上使用“this.length”时,它会查找“window.length”而不是“window.myObject.length”。这是正确的思维过程吗?@Iditarod1973:完美。而myFunc之所以这样做,是因为你调用它的方式。更多:和。