Node.js模块VS IIFE功能'范围

时间:2018-06-18 07:45:21

标签: javascript node.js

所以我在下面的代码中使用了IIFE函数。我的函数 MinWrite 在其范围之外查找 glVal (它在IIFE函数中声明,因此它必须查看外部范围)并成功找到glVal:

//test.js

var glVal = 3;

var Stuff = (function() {
    return {
        MinWrite: function() {
            console.log(glVal - 2);
        }
    }
})();

Stuff.MinWrite(); // returns 1

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

test2.js

var glVal = 3;

var Stuff = require('./test1');

Stuff.MinWrite(); // returns "glVal is not defined"

test1.js

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

它返回错误:" glVal未定义"。据我所知,当我们需要一个模块时,模块包装就会发生,并将代码包装在IIFE中的模块(test1.js)中。所以要求是一种平等的#34;到IIFE宣布。那么为什么我的代码在第二种情况下不起作用呢?

1 个答案:

答案 0 :(得分:3)

函数可以访问的作用域取决于声明函数的位置,而不是函数的调用位置。

两个JS模块是不同的范围。您在test2中创建的函数无权访问test1中声明的任何变量。

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

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