模块中声明的 NODE.JS 函数可以访问变量,但不能访问从其他模块导入的相同函数

pycode93

我发现即使这个函数在同一个范围内,它也无法访问“arr”

const arr = [1, 2, 3]
const foo = require("./test2")
// const foo = () => console.log(arr[0])
foo()

> ReferenceError: arr is not defined
// ***test2.js definition for reference***
module.exports = () => console.log(arr[0])

但是当我在主模块中声明相同的函数时,它工作得很好。

const arr = [1, 2, 3]
// const foo = require("./test2")
const foo = () => console.log(arr[0])
foo()

> 1 

两者都是相同的函数,除了一个声明来自模块,为什么一个能够访问全局变量而另一个不能?是不是 Node 执行 JS 代码的方式有问题?谁能解释这种行为?

第 123 章

在 NodeJS 中,所有文件都是模块。您在一个文件中定义的变量不容易被另一个文件访问,因为它是首先导入的。

如果您是在客户端使用脚本标签,似乎您所要做的就是将脚本按正确的顺序排列(或按正确的顺序导入模块),以便访问不同的代码段. 然而,在 NodeJS 中,每个文件都是它自己的实体。它不像在浏览器中那样只是变成一个长的、全局的 JavaScript 片段。

如果您希望 NodeJS 中的一个文件中的代码在另一个文件中工作,则必须定义要从该文件中导出的内容,并确保将其导入到要在其中使用的文件中。在您的示例中,arr[0]在 test2.js 中不存在。这就是您收到arr未定义错误的原因如果要在从 test2.js 导入的函数中使用 arr,可以执行以下操作:

/*  test2.js  */
module.exports = (x) => console.log(x)

/*  main file */
const arr = [1, 2, 3]
const foo = require("./test2")

foo(arr[0])
// > 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章