使用var重新声明对象

Adr*_*ran 2 javascript node.js

我试图了解下面的代码中发生了什么,有人可以帮忙吗?我正在使用node.js,我试图覆盖本机控制台(做其他事情).

这很好用:

var output = console;
console = {a: 2};

output.log(console)
Run Code Online (Sandbox Code Playgroud)

而这不是:

var output = console;
var console = {a: 2};

output.log(console)
Run Code Online (Sandbox Code Playgroud)

我得到"无法调用未定义的方法'日志'".

Fel*_*ing 6

在引擎执行函数代码(或全局上下文)之前,它会查找所有变量声明,并使用值定义变量undefined.这也称为可变吊装.

因此以下代码:

var output = console;
var console = {a: 2};

output.log(console)
Run Code Online (Sandbox Code Playgroud)

相当于:

var output;
var console;
output = console;
console = {a: 2};

output.log(console)
Run Code Online (Sandbox Code Playgroud)

在线output = console;,console仍然有价值undefined.

注意:只有在模块中执行代码或全局范围以外的任何其他代码时才会发生这种情况.在全局范围内,var console;声明将被忽略,因为console它已在全局范围内定义.


如果要创建局部console变量引用全局console对象,则必须通过全局对象(global在Node.js和window浏览器中)引用它.例如:

var output = global.console;
var console = {a: 2};

output.log(console)
Run Code Online (Sandbox Code Playgroud)