这里有新鲜出炉的 Node.JS 入门教程,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
Node.js 引入了模块(Module)概念,一个模块可以通过 module.exports 或 exports 将函数、变量等导出,以使其它 JavaScript 脚本通过 require() 函数引入并使用。那么 node.js 中 module.exports 与 exports 有什么区别呢?下面小编给大家解答下
Node.js 引入了模块(Module)概念,一个模块可以通过 module.exports 或 exports 将函数、变量等导出,以使其它 Javascript 脚本通过 require() 函数引入并使用。
module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {},exports 是指向的 module.exports 的引用,在模块内部大概是这样:
- exports = module.exports = {};
举个栗子,在 node.js 中创建模块非常简单,一个文件就是一个模块,所以我们创建一个 name.js 文件就创建了一个模块 name.js,使用 exports 和 require 对象对外提供接口和引用模块。
name.js
- var myName=function(){
- var name='AmberYLopez';
- console.log(name);
- };
- exports.myName=myName;
这样在使用的时候需要这样
app.js
- var name=require('./name');
如果我们创建的 name.js 文件是使用 module.exports 和 require 对象对外提供接口和引用模块。
name.js
- var myName=function(){
- var name='AmberYLopez';
- console.log(name);
- };
- module.exports=myName;
app.js
- var name=require('./name');
exports 赋值其实是给 module.exports 这个空对象添加 myName 属性而已,为什么 exports 要使用添加属性的方式,而不用 exports=myName
exports 是引用 module.exports 的值。exports 被改变的时候,module.exports 不会被改变,而模块导出的时候,真正导出的执行是 module.exports,而不是 exports。
如果将 name.js 改为
- var myName=function(){
- var name='AmberYLopez';
- console.log(name);
- };
- exports=myName;
app.js
- var name=require('./name');<br>console.log(name);
运行会报错。因为,前面是通过给 exports 添加属性,而现在对 exports 指向的内存做了修改,exports 和 module.exports 不再指向同一块内存,即 module.exports 指向的那块内存并没有做任何改变,仍然为一个空对象 {},所以会报错。
来源: http://www.phperz.com/article/17/0504/332166.html