gpt4 book ai didi

javascript - Node.js 模块 VS IIFE 函数的范围

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:38 25 4
gpt4 key购买 nike

所以我有下面带有 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)中。所以 require 有点“等于” IIFE 声明。那么为什么我的代码在第二种情况下不起作用?

最佳答案

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

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

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

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

关于javascript - Node.js 模块 VS IIFE 函数的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50904784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com