文件作用域
通信规则
。加载 require
1.执行被加载模块中的代码
2. 得到被加载模块中的 exports 导出的接口对象
在Node 中是模块作用域,默认文件中所有的成员只在当前文件模块中有效。
对于洗完可以被其他模块访问的成员。我们就需要吧这些公开的成员过载到 exports 接口对象中就可以了。 导出多个对象(必须在对象中)
exports.a = 123 export.b = 'hello' exports.c = function(){ console.log(a); } exports.d = { name:'tom' } //导出单个成员 拿到的是:函数,字符串 // 在Node中,每个模块内容都有一个自己的 module对象 //该module对象中,有一个成员叫: exports,也就一个对象。 // 就像下面这样 // var module = { // exports:{ // foo:'bar' // } // }原理解析:
//原因是:Node 为了简化你的操作,专门提供一个简写方法。 也就是说 在模块中还有这么一句代码 //var exports = module.exports //验证 //console.log(exports === module.exports); //$ node a.js //true那么导出多个呢
可以这样 module.exports = { foo: 'bar', add: function(x, y) { return x + y } }(帮助理解exports 与module.exports 之间的关系)
1. var obj = {} var obj1 = obj obj1.foo = 'bar' obj.foo = 'hello' obj1 = {} obj1.foo = 'world' console.log(obj1.foo); 2. 测试案例 exports.a = 123 exports = {} //修改了指向 exports.foo = 'bar' //存到了新地址 module.exports.b = 456 // 是原来的地址 打印: $ node a.js { a: 123, b: 456 } 解析: node.js底层代码处理: //谁来require我,谁就得到module.exports //默认在代码的最后又一句 return module.exports // 一定记住 ,最后return 的是 module.exports //不是exports ,所以你给exports重新赋值,不管用 //return module.exports尾结:
CommonJS 与 node.js的关系
在 ES2015 标准之前,JavaScript 语言没有原生的组织代码的方式。Node.js 用 CommonJS 模块规范填补了这个空白。
借鉴了。 就是这样。
CommonJS 模块规范
在Node.js 的 Javascript 还有一个很重要的概念:模块系统
。模块作用域
。使用require 方法用来加载模块 。使用exports接口对象用来导出模块中的 成员 ^-^ 笔记仅作为学习交流使用,如有异议请私信楼主删除。