Node.js模块VS IIFE函数的作用域



所以我在下面有这个带有IIFE函数的代码。我的函数MinWrite在其范围之外查找 glVal(它是在 IIFE 函数内部声明的,因此它必须查看外部范围(并成功找到glVal

//test.js
var glVal = 3;
var Stuff = (function() {
return {
MinWrite: function() {
console.log(glVal - 2);
}
}
})();
Stuff.MinWrite(); // returns 1

但是当我遇到这种情况时:

测试2.js

var glVal = 3;
var Stuff = require('./test1');
Stuff.MinWrite(); // returns "glVal is not defined"

测试1.js

module.exports = {
MinWrite: function() {
console.log(glVal - 2);
}
};

它返回错误:"glVal 未定义"。据我所知,当我们需要一个模块时,模块包装会发生并将代码包装在 IIFE 内的模块 (test1.js( 中。所以要求有点"等于"IIFE声明。那么为什么我的代码在第二种情况下不起作用呢?

函数有权访问的范围取决于声明函数的位置,而不是调用函数的位置。

这两个 JS 模块是不同的作用域。您在test2中创建的函数无法访问test1中声明的任何变量。

require模块使其导出在test1中可用,但它不会更改它有权访问的范围。

如果要在导出的函数中使用test1中的数据,则需要更改该函数以接受参数,然后传递它。

最新更新