javascript - 关于从其他文件调用函数的问题 - Javascript

标签 javascript html node.js

我正在寻求一些帮助来理解我正在从事的项目中的某些内容。我已经编写了一些可以运行的代码,但我不确定为什么。

在 Node.js 服务器中,/public/js 中有两个脚本。其中一个 (file1.js) 有一个函数 func()。同一目录下的file2.js调用func()成功。任何地方都没有 module.exporting 或 requireing,但这两个文件可以一起工作。但是,它们都在 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 这样的技术为什么AMDNode模块是在 standard JavaScript modules 之前设计的已添加到规范中。

关于javascript - 关于从其他文件调用函数的问题 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56330065/

相关文章:

javascript - 单击更改文本对齐

javascript - Sort(a,b) 在 Dojo.dnd.source 中不起作用

javascript - 在 Node.js 中,如何防止客户端从我的网站打开多个实例

javascript - 如何启用调试 express.js/node.js 应用程序

javascript - 如何在 ng-if 中传递 ng-repeat 变量?

javascript - js navigator.geolocation.getCurrentLocation() 的 Cocoa WebView 显示权限对话框

javascript - 在网站的所有页面中保留用户选择的背景

python - 使用python将图像输出到html

javascript - 如何获取具有 multiple 属性的 &lt;input type ="file"> 输入中的所有文件的名称?

node.js - AWS.DynamoDB.DocumentClient 未提供放置数据