coderwhy课程笔记(6)

coderwhy课程笔记(6)

node基础学习:

Node中有些所谓的全局对象,其实并不是真正的全局对象,而是属于模块的变量,只是在每个模块中都存在,看起来像是全局的。包括:__dirname, __filename, exports, module, require()

setImmediate(): 立即执行

process.nextTick(): 与事件循环有关

node中的global和浏览器中的window最主要的区别:var变量不会加到global里

node中每个文件都是一个单独的模块,采用CommonJS规范。模块中有CommonJS的核心变量,exports, require, module.exports等。const bar = require("bar.js"),这句话的意思是,把bar.js中的module.exports对象赋值给bar变量,两个文件模块共享同一个对象。

注意真实开发中一般通过上图的方式进行模块化。(此时exports和module.exports是两个不同的对象)。

关于node中的require查找规则:

情况一: require的参数可以是一个node 核心模块

情况三:名称参数不是路径,也不是内置模块

去node_modules目录下找这个参数为名称的目录,找下面的index.js。

关于模块的加载,有如下规则:

  1. 模块第一次被引入时,模块中的js代码会运行一次
  2. 模块多次引入时,会缓存,最终只加载(运行)一次。(用module.loaded来做标记位)
  3. 如果有循环引入,加载顺序是DFS

CommonJS的模块加载的缺点:同步加载,阻塞式的(服务器中加载一般是本地加载,可以接受,但是浏览器客户端从网络加载的话,会阻塞后面的js代码的执行。)所以在浏览器中一般不使用CommonJS规范。(webpack会使用require对代码进行打包, 是另外一回事)

早期(ES6 引入ES Modules之前),浏览器一般使用AMD/CMD对代码进行模块化。

AMD: Asynchronous Modules Definition. 异步模块定义。AMD实现常用的库是require.js。

CMD: Common Module Definition, 通用模块定义。常用实现:SeaJS。

发表回复

*您的电子邮件地址不会被公开。必填项已标记为 。

*
*