js module

今天和大家讨论全局变量的问题,感觉js还是很多不同。

1.node里一个文件是一个模块(module)
2.一个模块相当于一个函数作用域
3.exports的对象相当于module.export的一个引用

js GC 标记清除+引用计数

引用计数
在新建引用的时候就声明,哪些引用必须手动清除,哪些引用可以忽略不计,当其他引用消失以后,垃圾回收机制就可以释放内存。这样就能大大减轻程序员的负担,你只要清除主要引用就可以了。

一个模块里的const变量,也相当于这个模块的局部变量,
所以这个module被销毁的时候,也会触发GC

node引擎中的每个js文件都属于module类
node引擎中每个js文件都会被解析为Module对象加载到栈内存中
node引擎中所有框架,包括小程序,最终都会被编译为js文件
node引擎中所有js文件被编译后才逐一被创建为module对象并加载到栈内存中

垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记。
然后,它会去掉运行环境中的变量以及被环境中变量所引用的变量的标记。
此后,依然有标记的变量就被视为准备删除的变量,原因是在运行环境中已经无法访问到这些变量了。
最后,垃圾收集器完成内存清除工作,销毁那些带标记的值并回收它们所占用的内存空间。

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容