【发布时间】:2018-10-11 05:19:32
【问题描述】:
在提供的代码中,我在 VSCode 中得到的 console.log() 语句与在 Chrome 控制台中不同。就像现在的代码一样,当我在 VSCode 中运行此代码时,输出为 undefined,但是当我在 Chrome 控制台中运行此代码时,输出为 Nimit Maru。
如果我将第 1 行中的 var 关键字更改为 let(或 const),我会在 VSCode 和 Chrome 控制台中得到 undefined。
最后,如果我完全删除 var/let 关键字,并使用 fullName = 'Nimit Maru'; 运行第 1 行,我在 VSCode 和 Chrome 控制台中的输出都是 Nimit Maru。
我知道 let 关键字通常更适合本地范围,而 var 关键字将提升到全局范围,但我认为这不能解释为什么我从一个控制台得到不同的结果下一个。看到这个变量是在全局范围内定义的,我认为这不会有什么不同。
var fullName = 'Nimit Maru';
let myObj = {
fullName: 'David Yang',
property: {
fullName: 'Omri Bernstein',
getFullName: function() {
console.log(this.fullName);
},
},
};
let whosName = myObj.property.getFullName;
whosName();
感谢您提供的任何见解。
【问题讨论】:
-
the var keyword will hoist to global scope那句话是不正确的,因为它在谈论两个不同的概念,好像它们是相关的。更具体地说,提升不会改变范围——它只是意味着声明将被处理,就好像它在在同一范围内更进一步。 -
As the code is now, when I run this in VSCode我一直在考虑这个问题,最初我以为你的意思是“当我运行我在 VSCode 中编写的代码作为应用程序的一部分时”,但现在我相信你可能意味着存在VSCode 提供的一些 REPL 工具,类似于控制台。那是对的吗?如果是这样,请注意它可能会以不同方式 运行您的代码 - 它很可能将其包装在一个函数中,在这种情况下,您看到的行为是预期的行为。我认为 Firebug 过去是这样做的,这意味着用它和其他地方编写的代码可能会略有不同 -
抱歉没有说明清楚。我只是使用 Node.js 在 VSCode 的终端中执行这个 sn-p 代码。我认为您正在做某事.. 我了解全局范围与 Node.js 内部(在 VSCode 中)与 Chrome 的 window 对象内部有很大不同。所以我相信你是对的,这个sn-p很可能是在调用的时候被包裹起来的。
标签: javascript visual-studio-code google-chrome-devtools