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

时间:2014-05-27 17:39:47

标签: javascript

当我在控制台中运行时,我并不完全理解为什么它会产生零结果。我认为MyObject和myFunc都是全局的。我错过了什么概念来理解这一点?

myObject = {
length: 400,
};

function myFunc () {
return console.log(this.length);

}

myFunc(myObject.length); // equals zero

2 个答案:

答案 0 :(得分:2)

它显示window.length的值(这是文档中的帧/ iframe数)。要让myFunc显示您传递给它的对象的length的值,您必须使用该参数:

function myFunc (obj) {
    return console.log(obj.length);
}

如果您正在尝试探索implicit globals(您的myObject是一个隐含的全局;它们是一件坏事(tm)),那么{{1}应该在没有参数的情况下调用,并且应该使用myFunc或可能myObject.length(它们都是相同的东西)。

答案 1 :(得分:0)

您将对象作为参数传递,但您没有在函数中接收它。 this上下文中的myFunc不是对象myObject。它是window对象。

要实现您的目标,请修改您的代码:

myObject = {
    length: 400,
};

function myFunc (obj) {
    return console.log(obj.length); 
}

myFunc(myObject); // equals zero

注意:

要验证this是否为window对象,请参阅此fiddle,我已将控制台行修改为return console.log(this);。控制台输出Window对象。

Demonstration Fiddle