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