使用var重新声明对象

时间:2014-01-08 15:53:01

标签: javascript node.js

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

这很好用:

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

output.log(console)

这并不是:

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

output.log(console)

我得"无法调用方法' log'未定义"

2 个答案:

答案 0 :(得分:6)

在引擎执行函数代码(或全局上下文)之前,它会查找所有变量声明,并使用值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对象,则必须通过全局对象引用它,即{{1在Node.js和浏览器中的global。 E.g:

window

答案 1 :(得分:0)

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

output.log(console)

output = null因为你之后声明了控制台