Javascript Node.js模块与IIFE函数的比较';范围
下面是带IIFE函数的代码。我的函数MinWrite在其作用域之外查找glVal(它是在IIFE函数内声明的,因此它必须查找外部作用域),并成功查找glVal:Javascript Node.js模块与IIFE函数的比较';范围,javascript,node.js,Javascript,Node.js,下面是带IIFE函数的代码。我的函数MinWrite在其作用域之外查找glVal(它是在IIFE函数内声明的,因此它必须查找外部作用域),并成功查找glVal: //test.js var glVal = 3; var Stuff = (function() { return { MinWrite: function() { console.log(glVal - 2); } } })(); Stuff.MinWrit
//test.js
var glVal = 3;
var Stuff = (function() {
return {
MinWrite: function() {
console.log(glVal - 2);
}
}
})();
Stuff.MinWrite(); // returns 1
但当我遇到这种情况时:
test2.js
test1.js
它返回错误:“未定义glVal”。据我所知,当我们需要一个模块时,模块包装会发生,并将代码包装在IIFE中的模块(test1.js)中。所以require有点“等同于”生命声明。那么为什么我的代码在第二种情况下不起作用呢?函数可以访问的范围取决于函数的声明位置,而不是函数的调用位置 这两个JS模块的作用域不同。在
test2
中创建的函数无权访问test1
中声明的任何变量
require
ing模块使其导出在test1
中可用,但它不会更改它可以访问的作用域
如果要在导出的函数中使用来自
test1
的数据,则需要更改该函数以接受参数,然后传递参数。函数可以访问的范围取决于函数的声明位置,而不是函数的调用位置
这两个JS模块的作用域不同。在test2
中创建的函数无权访问test1
中声明的任何变量
require
ing模块使其导出在test1
中可用,但它不会更改它可以访问的作用域
如果要在导出的函数中使用
test1
中的数据,则需要更改该函数以接受参数,然后传递参数。但这是怎么回事:()。第一个答案是:“模块由Node.js包装在一个函数中”?或者就在这里:()@PetroKoval-那怎么办?这与我在回答中所说的没有任何矛盾。所以当我们“需要”模块的代码被包装在一个函数中并执行时,但同样的代码仍然位于一个完全不同的单独的范围内,对吗?但是这个呢:()。第一个答案是:“模块由Node.js包装在一个函数中”?或者就在这里:()@PetroKoval-那怎么办?这与我在回答中所说的没有任何矛盾,所以当我们“需要”模块的代码被包装在一个函数中并被执行,但同样的代码仍然位于一个完全不同的单独的范围内,对吗?
var glVal = 3;
var Stuff = require('./test1');
Stuff.MinWrite(); // returns "glVal is not defined"
module.exports = {
MinWrite: function() {
console.log(glVal - 2);
}
};