javascript - Node.js 中的仅限模块范围

标签 javascript node.js scope global

我正在尝试获取一个函数来在模块的顶级范围内设置变量,但不让它泄漏到全局范围内(因为......不好)。起初我以为模块中的隐式变量声明会保留在模块中,但似乎它也会进入调用模块的脚本中。

以(aModule.node.js)为例:

var
  onlyToThisModule = true;

function createAGlobal() {
  //creates a implicit var unfortunately
  globalToEveryone = true;
}

createAGlobal(); //this will now appear in the global scope for the script that require() it. eeek.

console.log(onlyToThisModule);

exports = createAGlobal;

然后要求它:

var
  aModule = require('./aModule.node.js');

console.log(globalToEveryone); //outputs "true"
console.log(typeof onlyToThisModule); //outputs "undefined"

我想做的是在 createAGlobal 中声明一个不会泄漏到全局范围的变量。我想将它保留在调用它的函数的范围内。我知道我可以将它放在模块本身的 var 语句中,但我希望仅在有人执行该函数时才声明变量。有没有办法实现这种类型的范围界定?

最佳答案

为什么要求只有在有人调用函数时才声明变量?如果这不是严格要求,那么您可以在模块作用域中声明它,并在函数作用域中初始化它:

var onlyToThisModule; // currently `undefined`

function initVar() {
    onlyToThisModule = true;
}

console.log(onlyToThisModule); // undefined
initVar();
console.log(onlyToThisModule); // true

...另一方面,如果您确实只想在函数中声明一个变量,但又想让它可供模块的其余部分使用,那么您可以将其创建为类属性:

function myClass() {
    this.onlyToThisModule = true;
}

var mc = new myClass();
console.log(mc.onlyToThisModule);

...但这仍然会将变量暴露给调用模块,只是通过函数的中介。

如果这些都不适合您的情况,那么您必须提供更多详细信息。

关于javascript - Node.js 中的仅限模块范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23253872/

相关文章:

javascript - 如何使用从 GitHub API 获取的数据动态填充我的表?

javascript - 从 JavaScript 对象中删除属性,由 Mongoose 的 "findOneAndUpdate"方法返回

带有 Javascript 的 PHP - <script></script> 标记内的 PHP 变量的范围是什么?

node.js - 如何在node-orm中定义虚拟属性?

node.js - 在环回中包含相关模型中的子模型

c++ - 为什么动态绑定(bind)可以覆盖 C++ 中的名称隐藏?

bash - 嵌套函数调用中的变量赋值意外地更改了调用者作用域中的局部变量

javascript - 生成空二维数组的最佳方法

javascript - 需要帮助使用 css div ul li 列表创建 html 页面以使其旋转

javascript - JS Regex test()始终返回true