今天和大家讨论全局变量的问题,感觉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对象并加载到栈内存中
垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记。
然后,它会去掉运行环境中的变量以及被环境中变量所引用的变量的标记。
此后,依然有标记的变量就被视为准备删除的变量,原因是在运行环境中已经无法访问到这些变量了。
最后,垃圾收集器完成内存清除工作,销毁那些带标记的值并回收它们所占用的内存空间。
网友评论