当我在控制台中运行时,我并不完全理解为什么它会产生零结果。我认为MyObject和myFunc都是全局的。我错过了什么概念来理解这一点?
myObject = {
length: 400,
};
function myFunc () {
return console.log(this.length);
}
myFunc(myObject.length); // equals zero
答案 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
对象。