【发布时间】:2020-01-19 03:11:01
【问题描述】:
在 Javascript 中是否有一种方法可以临时替换在外部范围中定义的变量,但只在内部范围内保留该值,就像在 C++ 等其他语言中一样?例如:
const debug = require('debug')('mymodule');
function example() {
// Temporarily replace main `debug` variable with value that
// only persists for this function
const debug = debug.extend('myfunction');
debug('should be in mymodule.myfunction');
}
debug('should be in mymodule');
当我尝试这样做时,Node 抱怨说我在定义它之前访问了内部 debug,而我真正想做的是从父范围访问 debug。
【问题讨论】:
-
你可以用一个本地声明的变量覆盖更高范围的变量,但是你不能访问更高范围的变量。
-
@jfriend00:从技术上讲,我不需要在本地定义后访问更高范围的,因为我希望本地在函数期间替换它。跨度>
-
但是,你不能这样做
const debug = debug.extend('myfunction');因为新的const debug已经在这个块作用域中定义(但没有初始化)所以你不能再访问你正在尝试的更高作用域的那个到。所有const变量都被“提升”到其范围的顶部,因此它已经在声明它的块的开头覆盖/隐藏了更高范围的变量。 -
是的,所以我希望有人想出一个聪明的解决方案来解决这个问题:-)
-
好吧,您可以将更高范围的变量保存到一个不同命名的变量中,然后在您定义本地覆盖的地方引入一个新的块范围。然后,您可以访问更高范围的副本和新定义的副本。看我的回答。
标签: node.js scope hidden-variables