我想了解下面这段代码中发生了什么,有人能帮忙吗?我正在使用 node.js,我正在尝试覆盖 native 控制台(以执行其他操作)。
这很好用:
var output = console;
console = {a: 2};
output.log(console)
这不是:
var output = console;
var console = {a: 2};
output.log(console)
我收到“无法调用未定义的方法‘log’”。
最佳答案
在引擎执行函数代码(或全局上下文)之前,它会查找所有变量声明,并定义值为 undefined
的变量。这也称为变量提升。
因此代码如下:
var output = console;
var console = {a: 2};
output.log(console)
相当于:
var output;
var console;
output = console;
console = {a: 2};
output.log(console)
在 output = console;
行,console
的值仍然是 undefined
。
注意:只有当您在模块或任何其他非全局范围内执行代码时才会发生这种情况。在全局范围内,var console;
声明将被忽略,因为 console
已在全局范围内定义。
如果你想创建一个本地console
变量并引用全局console
对象,你必须通过全局对象来引用它,在 Node.js 中是 global
,在浏览器中是 window
。例如:
var output = global.console;
var console = {a: 2};
output.log(console)
关于javascript - 用 var 重新声明对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21000379/