Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 全局对象和赋值-为什么它能识别赋值?_Javascript - Fatal编程技术网

Javascript 全局对象和赋值-为什么它能识别赋值?

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和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之所以这样做,是因为你调用它的方式。更多:和。