我想了解以下代码中发生了什么,有人可以帮忙吗?我正在使用node.js,我试图覆盖本机控制台(做其他事情)。
这很好用:
var output = console;
console = {a: 2};
output.log(console)
这并不是:
var output = console;
var console = {a: 2};
output.log(console)
我得"无法调用方法' log'未定义" 。
答案 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因为你之后声明了控制台