为啥 js 引用其他文件的函数相对来说要麻烦一些?

2022-11-04 18:57:49 +08:00
 pdog18

如果是 java 直接 ide import 一下就好了。 可 js 如果不想让一个 js 文件又臭又长想分成几个文件的话就要写一堆麻烦的东西....

7089 次点击
所在节点    Node.js
32 条回复
pocarisweat
2022-11-04 23:09:34 +08:00
好像很多朋友都没有正面回答你的问题,我来尝试说下我的理解。

想象自己是一个小学生,要召集一群同学出去玩,要么可以自己去找一些认识的同学,然后再借助他们找到更多的同学;要么可以联系班主任,让他来协调所有同学出去玩。前者的缺点是你需要记得同学的联系方式并且主动联系他们,后者的缺点是需要依赖班主任这个额外角色。

对应到实际语言的模块系统里,上面前者的方式就像一些语言在代码里主动从文件引入依赖模块的做法,比如 JS 或者 Rust ,只要指定一个入口点,编译器就能一步步从入口点这个模块找到所有依赖的模块,构成一棵树,所以你需要「一些麻烦的东西」来自己联系小伙伴。(虽然 Rust 有 Cargo ,但 Cargo 并没有做这些事情,依然是 Rust 编译器完成的)

另一些语言,引入了独立的构建管理器来解决这个问题,比如 Java 和 Swift ,在这些语言里你就不需要手动去 import 某个具体文件,因为构建系统(班主任)已经帮你追踪好了每个模块的信息,再帮你完成这个事情。缺点就是这个构建系统对新手来讲容易像一个黑箱,没有 JS 一样手动 import 具体文件一样直观。

还有更原始的,那就是 C/C++,但它们也不过是直接把独立文件的构建过程暴露出来而已。你要用 CMake 等作为构建系统那也没问题。
humbass
2022-11-04 23:51:07 +08:00
大概理解 楼主 的意思,本人学习 swift 的时候,发现 swift 的函数、类所在的文件写在项目下任意地方都可以,只要名称不重复就行,从某种意义上来说引入非常的傻瓜化;

但是 JS 能活到现在肯定不是偶然的:

一是 API 相当稳定,从 es5-es6 ,API 是完全兼容的,以前怎么 用现在还是怎么用,所以菜鸟在网上搜索到的 例子 可以无脑的跑起来,像隔壁的 python 的 2-3 那叫一个坑。

其次,手动引入操作从某种程度上来说,也是一种克制化设计,并不需要完全自动化,但也能正确的运行起来,够用就好。




连谷歌的各种作妖操作,想换掉这门垃圾语言,你看看越来越多人使用。当年 flutter 如果想办法用 js 开发,流行程度肯定大不一样。
jones2000
2022-11-05 00:04:52 +08:00
js 你分几个文件,根本不需要引入, 只要再你使用的页面里面( <script src="js 文件"></script>)把你这几个文件都加上就行了。 根本不需要 import
pdog18
2022-11-05 11:01:43 +08:00
@jones2000 如果没有 html 呢?
xintianyou
2022-11-05 12:40:16 +08:00
@jones2000 你对 js 的印象还停留在几年前
jones2000
2022-11-05 13:17:18 +08:00
@xintianyou js 还分几年前,几年后的? 能跑起来不就可以了。
jones2000
2022-11-05 13:27:38 +08:00
@pdog18 写个 main 函数导出下就可以了。
jones2000
2022-11-05 13:53:01 +08:00
@pdog18
@xintianyou

test1.js

```javascript
function ClassA()
{
this.Value
.....
}
```


test2.js

```javascript
function ClassB()
{
this.Value
.....
}
```

页面调试直接用 js 文件

```javascript
<script src="test1.js"></script>
<script src="test2.js"></script>
```

vue, nodejs 等需要导出的加一个导出 js

export.js

```javascript
//把给外界调用的方法暴露出来
export default
{
ClassB: ClassB,
ClassA: ClassA
...
}
```

用命令行合并文件就完事了。
copy test1.js+test2.js+export.js test.node.js /b


一般直接用浏览器调试,方便,不需要编译, 一个记事本+浏览器就可以开发了。前端开发要搞怎么复杂干什么呢,最后还不是编译成 es5 的 js 。
Manweill
2022-11-05 16:31:46 +08:00
@statumer 为什么是 C#,咬到你了?
Manweill
2022-11-05 16:35:06 +08:00
yashika
2022-11-05 16:52:10 +08:00
我感觉你的问题应该是命名空间的范畴,早期 js 要敲一堆代码,现在依靠 namespace ,大大简化了导入要敲的代码了。
java 是默认引用了一堆全局的 namespace ,而 js 这边要达到同样的编码体验就是要用 ts 了。其实现代 PHP 也是依靠命名空间解决了此类问题的,使得导入变的规范多了。大家都在借鉴 java 的成功之处,哈哈。
zhangxh1023
2022-11-18 16:07:45 +08:00
js 的运行环境比较多,浏览器的 js ,Node.js 压根就不是一个东西。谁知道你要的是什么 js ,更不要说各类 js 的超集,打包工具,不同的模块规范。
不如说,为什么编程语言引用其他文件的函数相对来说要麻烦一些。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/892757

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX