我试图了解下面的代码中发生了什么,有人可以帮忙吗?我正在使用node.js,我试图覆盖本机控制台(做其他事情).
这很好用:
var output = console; console = {a: 2}; output.log(console)
而这不是:
var output = console; var console = {a: 2}; output.log(console)
我得到"无法调用未定义的方法'日志'".
在引擎执行函数代码(或全局上下文)之前,它会查找所有变量声明,并使用值定义变量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
对象,则必须通过全局对象(global
在Node.js和window
浏览器中)引用它.例如:
var output = global.console; var console = {a: 2}; output.log(console)