我认为控制台应该为我返回34,但我在vscode ide中得到了“undefined”。
我在chrome中运行下面的代码,然后我得到了34。
我想知道原因,如果我的设置是原因,我应该如何修改设置?
function foo() {
console.log( this.a );
}
var obj = {
a: 2,
foo: foo
};
var bar = obj.foo;
var a = 34;
bar();
谢谢
2条答案
按热度按时间kuhbmx9i1#
正如我已经测试和下面的图片可以显示
Chrome调试器中的
this
引用了window
,但在VSCode中,它是一个具有一些符号的对象(例如变量名称)所以主要原因是VSCode调试器和Chrome之间的差异行为。
在VSCode中:
在Chrome浏览器中:
mnemlml82#
输出为34的原因在于bar到底是什么
实际上是因为
bar
指向全局函数foo
最后,当你调用
bar()
时,你实际上并没有调用obj.foo()
,而是调用全局foo
。在JavaScript中,this
值只有在你调用函数时才被定义,this
是你调用函数的上下文,在这个例子中,是window
,window.a
指向34。你的设置没有问题。
欢迎阅读这篇精彩的文章,并在下面留下您的评论!How does the "this" keyword work?