javascript - 用 var 重新声明对象

标签 javascript node.js

我想了解下面这段代码中发生了什么,有人能帮忙吗?我正在使用 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/

相关文章:

javascript - 在 JavaScript 中,为什么 (undefined && true) 返回 undefined?

javascript - 没有端口号的node.js url

javascript - 使用 Node 的 fs.readFile() 时,我应该在路径前加上 __dirname 吗?

php - 页面刷新而不是 Ajax Load 没有

javascript - 删除前确认

node.js - body-parser - 扩展选项(qs vs querystring)

javascript - 使用 Nan 检查 node.js 插件中的 instanceof

node.js - bash:bower:找不到命令,我不知道该怎么办

javascript - jQuery 图像 slider 不适用于 jQuery 循环 (ASP.NET)

javascript - 使用 jquery for mobile 删除一个 div