js global namespace

  1. 最基本的js写法是:不管是要调用项目内或项目外的其他文件的方法,都是直接在当前文件中调用,然后在web文件(html)中利用 <script> 按依赖顺序引入所有的内部和外部文件。
    • 即每个js中声明的变量都是全局变量。js采用{}来定义变量生命周期(或者说namespace),除了被{}所包围的其余变量都是全局变量。有个god object即window---全局对象,所有的变量、函数都是这个god object的member---全局变量。
    • 利用 <script> 引入所有js,效果类似于将所有文件的内容组装到一个大文件运行。因此声明顺序受依赖关系约束。
    • 即browser运行每个html时,它始终是将这个html中的所有script作为一个文件来运行。即browser是个解释执行器,它总是执行一个文件。而不同于后端(例如java 的jre)的编译运行,
  2. 前后端的区别:
    • browser是解释执行器,而js不提供import机制,所以只能人工解决依赖确定关系---需要提供一种机制来解决这中依赖确定关系
    • 后端执行是通过server来执行的,服务器会下载所需lib存放到服务器容器中,运行是直接从容器拿。而前端执行是通过browser来执行,每次执行js browser都需要下载依赖的各种js文件,然后将这些文件组合成一个来运行。当然有jquery之类的会利用缓存使得不需要每次执行都下载,然而这依然不是一个最佳解决方案---需要提供一种机制来解决依赖下载和组装。
前端 后端
开发生命周期 1. code
2. 简单组合所有文件
3. 解释一行为可执行码--即时性
4. 执行一行
1. code(提供import)
2. 编译:确定依赖关系,据此依次编译各个文件为汇编码/机器码(其中有预编译、预处理等步骤)
3. 连接:将外部函数代码添加到上述文件中,组合成一个完整可执行文件。
4. 运行整个文件