global对象

浏览器端JavaScript中的全局对象为“window”,在浏览器中定义的变量都会成为“window”对象的属性。

不像浏览器端JavaScript,在Nodejs中没有window对象,Nodejs中的全局对象为“global”,并且我们定义的变量不会作为“global”的属性。Nodejs遵循CommonJS规范。

模块包裹函数

在Nodejs应用中,每个文件都是一个模块,所有代码都在模块作用域中执行。每个文件中定义的变量和函数仅属于该模块作用域,其他文件是无法访问到的,除非将其明确的export出去。

Nodejs会自动将每个文件中的代码通过IIFE(Immediately-invoked Funtion Expression,立即调用的函数表达式)包裹来创建模块作用域。



上图第一行是Nodejs为每个文件自动生成的,可以通过在第一行抛出错误并运行来查看到。如:

//test.js
throw new Error('test IIFE');
var url = 'http://hiram.io/log'; function log(msg){
//发送HTTP请求...
console.log(msg);
} module.exports = log;

  • 通过使用module.exports(或exports)可以将一个变量或者函数暴露出去,如: module.exports.sayHi = sayHi
  • 使用require函数加载一个模块,将返回目标模块暴露的对象。如: const logger = require('./log');

Nodejs的内置模块

Nodejs有一些内置模块,可以让我们操作文件系统、path对象、网络、操作系统等。

EventEmitter是Nodejs中可以让我们触发以及处理事件的一个核心类,许多内置类都继承于EventEmitter。当然,我们也可以自定义继承于EventEmitter的类。

// logger.js
const EventEmitter = require('event');
let url = 'http://hiram.io/log'; class Logger extends EventEmitter {
log(message) {
console.log(message);
// 触发messagelogged事件
this.emit('messageLogged', {id: 1, url: 'http://'});
}
} module.exports = Logger;
// app.js
const Logger = require('./logger');
const logger = new Logger(); //注册messageLogged事件监听
logger.on('messageLogged', (arg) => {
console.log("Listener Called', arg);
}); logger.log('message');

Nodejs的模块系统的更多相关文章

  1. nodejs的模块系统(实例分析exprots和module.exprots)

    前言:工欲善其事,必先利其器.模块系统是nodejs组织管理代码的利器也是调用第三方代码的途径,本文将详细讲解nodejs的模块系统.在文章最后实例分析一下exprots和module.exprots ...

  2. nodejs基础 -- 模块系统

    为了让nodejs的文件可以相互调用,nodejs提供了一个简单的模块系统. 模块:是nodejs应用程序的基本组成部分,文件和模块一一对应.即,一个nodejs文件就是一个模块,这个文件可能是jav ...

  3. Nodejs的模块系统以及require的机制

    一.简介 Nodejs 有一个简单的模块加载系统.在 Nodejs 中,文件和模块是一一对应的(每个文件被视为一个独立的模块),这个文件可能是 JavaScript 代码,JSON 或者编译过的C/C ...

  4. 前端笔记之NodeJS(二)路由&REPL&模块系统&npm

    一.路由机制(静态资源文件处理) 1.1 Nodejs没有根目录 MIME类型:http://www.w3school.com.cn/media/media_mimeref.asp 在Apache中, ...

  5. Nodejs中的模块系统

    一.模块化的定义 ①具有文件作用域 ②具有通信规则:加载和导出规则 二.CommonJS模块规范 1.nodejs中的模块系统,具有文件作用域,也具有通信规则,使用require方法加载模块,使用ex ...

  6. nodejs cluster模块初探

    大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,为了使用多核cpu来提高性能 就有了cluster,让node可以利用多核CPU实现并行 ...

  7. Node.js的模块系统

    编写稍大一点的程序时一般都会将代码模块化.Node.js提供了一个简单的模块系统.模块既可能是一个文件,也可能是包含一个或多个文件的目录. 模块的创建  如果模块是个文件,一般将代码合理拆分到不同的J ...

  8. 10、Node.js模块系统

    ##################################################################################介绍Node.js模块系统为了让No ...

  9. Node.js:模块系统

    ylbtech-Node.js:模块系统 1.返回顶部 1. Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的 ...

随机推荐

  1. 2019.01.16 bzoj4399: 魔法少女LJJ(线段树合并)

    传送门 线段树合并菜题(然而findfindfind函数写错位置调了好久) 支持的操作题目写的很清楚了,然后有一个神奇的限制c≤7c\le7c≤7要注意到不然会去想毒瘤线段树的做法. 思路: 这题只有 ...

  2. 2018.06.26 NOIP模拟 号码(数位dp)

    题目背景 SOURCE:NOIP2015-GDZSJNZX(难) 题目描述 Mike 正在在忙碌地发着各种各样的的短信.旁边的同学 Tom 注意到,Mike 发出短信的接收方手机号码似乎都满足着特别的 ...

  3. WebSocket的原理与优缺点

    websocket 是长连接,受网络限制比较大,需要处理好重连,比如用户进电梯或电信用户打个电话网断了,这时候就需要重连,如果 ws 一直重连不上,有些较复杂的业务方会不愿意的,是不是还要搞个 htt ...

  4. Codeforces Round #541 (Div. 2) G dp + 思维 + 单调栈 or 链表 (连锁反应)

    https://codeforces.com/contest/1131/problem/G 题意 给你一排m个的骨牌(m<=1e7),每块之间相距1,每块高h[i],推倒代价c[i],假如\(a ...

  5. PHP-CGI、FASTCGI和php-fpm的关系

    首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. web server(比如说nginx)只是内容的分发者.比如,如果请求/index.h ...

  6. IntelliJ IDEA 2017版 使用笔记(五) 模板 live template自定义设置(二) ;postfix使用;IDE快捷键使用

    一.live template 活模板     就像这个单词的含义一样,live template就是一个高效的提高代码,书写速度的方式,(live template位置File-----settin ...

  7. mysql学习之路_外键

    回顾4 连接查询: 连接多张表到一起,不管记录数如何,字段数一定会增加. 分类:内连接,外连接.自然连接,交叉连接, 交叉连接:cross join (笛卡尔积) 内连接:inner join,左右两 ...

  8. python处理中文

    python 清洗中文文件 需要用到的两个链接: 1,unicode编码转换器 http://www.bangnishouji.com/tools/chtounicode.html 2,Python匹 ...

  9. mui框架如何实现页面间传值

    mui框架如何实现页面间传值 我的传值 listDetail = '<li class="mui-table-view-cell mui-media>">< ...

  10. Update Node.js Package.json

    Update the latest package while using node.js, follow the command as following. npm i -g npm-check-u ...