gpt4 book ai didi

javascript - 为什么返回 3, 1?

转载 作者:搜寻专家 更新时间:2023-11-01 04:54:07 25 4
gpt4 key购买 nike

后来我明白了,我们在 foo 对象上调用警报,该对象有另一个名为 baz 的对象作为其属性,而该对象又有一个名为 的方法>bar 返回 x 的值。由于 lexical scope(我认为 :)),JS 编译器/解释器沿链向上,在 baz 中找到 x 并返回 1。

我的猜测是当分配给变量 go 然后从全局范围调用时,你得到 3?只是想找出后台发生的事情。任何帮助将不胜感激!!!

var x = 3;

var foo = {
x: 2,
baz: {
x: 1,
bar: function() {
return this.x;
}
}
}

var go = foo.baz.bar;

alert(go());
alert(foo.baz.bar());

最佳答案

当你做这样的事情时:

var go = foo.baz.bar;
go();

你会发现 go 在调用 bar() 之前丢失了对 foo.baz 的引用。它只是一个指向 bar 函数的指针,与它所附加的对象没有任何关联。这意味着当 bar 方法执行时,this 将不是 foo.baz

这显然是 .bind() 的开发目的。你可以像这样使用它:

var go = foo.baz.bar.bind(foo.baz);
go();

然后,它将为您工作。您也可以执行相同操作的手动版本:

var go = function() {return foo.baz.bar();}
go();

但是 .bind() 现在已内置到语言中以帮助您解决此类问题。

关于javascript - 为什么返回 3, 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28479754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com