Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js模块与IIFE函数的比较';范围_Javascript_Node.js - Fatal编程技术网

Javascript Node.js模块与IIFE函数的比较';范围

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

下面是带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 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);
    }
};