Javascript 为什么要打印vscode;“未定义”;结果
我认为控制台应该为我返回34,但我在vscode ide中得到了“未定义” 我在chrome中运行了以下代码,然后得到了34 我想知道为什么,如果我的设置是原因,我应该如何修改设置Javascript 为什么要打印vscode;“未定义”;结果,javascript,visual-studio-code,Javascript,Visual Studio Code,我认为控制台应该为我返回34,但我在vscode ide中得到了“未定义” 我在chrome中运行了以下代码,然后得到了34 我想知道为什么,如果我的设置是原因,我应该如何修改设置 function foo() { console.log( this.a ); } var obj = { a: 2, foo: foo }; var bar = obj.foo; var a = 34;
function foo() {
console.log( this.a );
}
var obj = {
a: 2,
foo: foo
};
var bar = obj.foo;
var a = 34;
bar();
谢谢输出为34的原因在于条形图到底是什么 实际上,这是因为
bar
指向全局函数foo
最后,当您调用bar()
时,实际上并不是调用obj.foo()
,而是调用全局foo
。在JavaScript中,this
值仅在调用函数时定义,this
是调用函数的上下文,在本例中是窗口和窗口。a
指向34
你的设置没有问题
请随意阅读这篇精彩的文章,并在下面留下您的评论!
输出为34的原因在于条形图的确切含义
实际上,这是因为bar
指向全局函数foo
最后,当您调用bar()
时,实际上并不是调用obj.foo()
,而是调用全局foo
。在JavaScript中,this
值仅在调用函数时定义,this
是调用函数的上下文,在本例中是窗口和窗口。a
指向34
你的设置没有问题
请随意阅读这篇精彩的文章,并在下面留下您的评论!
正如我测试过的和下面的图片所示
这
在Chrome调试器中指的是窗口
,但在VSCode中,它可能是一个带有符号的对象(例如变量名称)
因此,主要原因是VSCode调试器和Chrome之间的行为差异
在VSCode中:
在Chrome中:正如我测试过的和下面的图片所示
这
在Chrome调试器中指的是窗口
,但在VSCode中,它可能是一个带有符号的对象(例如变量名称)
因此,主要原因是VSCode调试器和Chrome之间的行为差异
在VSCode中:
在Chrome中:可能重复我知道“this”的机制,我只是尝试在vscode中写一个简单的例子。我也知道结果。但我在vscode中没有得到,所以我只是问这个问题,是关于vscode而不是js。是的,我把函数foo放在foo的属性中,把obj.foo放在变量“bar”中,然后我调用了“bar”在最后一行的代码片段中。可能重复我知道“this”的机制,我只是试着在vscode中写一个简单的例子。我也知道结果。但我在vscode中没有得到,所以我只是问这个问题,是关于vscode而不是js。是的,我把函数foo放在foo的属性中,把obj.foo放在变量“bar”中,我在代码段的最后一行调用了“bar”。那么你能解释一下为什么上面的代码段在vscode中打印为“undefined”吗?@ShawnLi theundefined
是全局函数foo
的返回值,因为它什么也不返回。谢谢,我认为取消定义是函数打印的结果。但是我在vscode中找不到正确的结果。这太奇怪了。对不起,我刚刚更改了代码,当我删除“this”关键字时,控制台显示“34”,它不是返回值。那么你能解释一下为什么vscode中的上述代码段打印为“undefined”吗?@ShawnLiundefined
是全局函数foo
的返回值,因为它不返回任何内容。谢谢,我认为未定义是函数打印的结果。但是我在vscode中找不到正确的结果。太奇怪了。对不起,我刚更改了代码,当我删除“this”关键字时,控制台显示“34”,这不是回报值是的,你是对的。我刚刚意识到这个问题。非常感谢你解决了我的问题。是的,你是对的。我刚刚意识到这个问题。非常感谢你解决了我的问题。