我正在寻求一些帮助来理解我正在从事的项目中的某些内容。我已经编写了一些可以运行的代码,但我不确定为什么。
在 Node.js 服务器中,/public/js 中有两个脚本。其中一个 (file1.js
) 有一个函数 func()
。同一目录下的file2.js
调用func()
成功。任何地方都没有 module.export
ing 或 require
ing,但这两个文件可以一起工作。但是,它们都在 index.ejs 文件中引用。这是他们能够交流的地方吗?
//file1.js
function func() {
console.log("foo")
}
//file2.js
func()
//index.ejs
...
<script src="public/js/file1.js"></script>
<script src="public/js/file2.js"></script>
...
我花了一整天的时间阅读,但找不到有关此主题的任何内容。
最佳答案
您的问题是关于 JavaScript 如何在浏览器中工作的。
Node.js 与此无关。它所做的只是运行一个 HTTP 服务器程序,向浏览器提供静态文件。
当您使用 script 元素将脚本加载到浏览器中时(并且不要使用 type="module"
),脚本文件最外层范围中的任何变量(例如,不在 block 内的 let
或在函数内的 var
)都将成为全局,并且可以被以这种方式加载到同一 HTML 文档中的任何其他脚本访问。
全局变量很困惑,并且是不同代码段意外相互干扰的好方法,因此现代 JavaScript 通常避免使用它们。当 JS 首次在浏览器中实现时,这种 JavaScript 编程风格并不常见:因此出现了上述行为。
这就是为什么人们开始使用像 the revealing module pattern 这样的技术为什么AMD和 Node模块是在 standard JavaScript modules 之前设计的已添加到规范中。
关于javascript - 关于从其他文件调用函数的问题 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56330065/