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

Global Object and assignment - why does it recognize the assignment?

本文关键字:赋值 识别 为什么 对象 全局      更新时间:2023-09-26

当我在控制台中运行时,我不太明白为什么它产生零结果。我认为MyObject和myfunction都是全局的。为了正确理解这个问题,我遗漏了什么概念?

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.lengththis.myObject.length(结果相同)。

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

要达到你想要做的,修改你的代码,像这样:

myObject = {
    length: 400,
};
function myFunc (obj) {
    return console.log(obj.length); 
}
myFunc(myObject); // equals zero

注意:

要验证thiswindow对象,请参阅我将控制台行修改为return console.log(this);的地方。控制台输出Window对象。

示范小提琴