node学习(2)exports/require

分享
开发者 2024-9-19 04:53:52 118 0 来自 中国
知识点:
1:node.js中每个文件就是一个模块,有自己的作用域。在一个文件中界说的变量,函数,类都是私有的。对其他文件不可见。
2:node.js遵照common.js规范,也就是说在ES Module中我们的导入导出利用的是import和export。在node中引入和袒露利用的是require和module.exports。
3:require用来加载某个模块
//b.jsvar a = require('a.js')console.log(a.name) // 'morrain'console.log(a.getAge())// 184:module代表当前模块,是一个对象,保存了当前模块信息。exports是module上的一个属性,保存了当前模块要导出的接口或变量。利用require加载某个模块取到的值,就是模块利用exports导出的值。
// a.jsvar name = 'morrain'var age = 18module.exports.name = namemodule.exports.getAge = function(){    return age}5:CommonJS 规范规定,每个模块内部有两个变量可以利用,require 和 module。node.js在实现common.js规范的时间,为每个模块提供了一个exports的私有变量。指向了module.exports。可以理解为node.js在每个模块开始的地方,添加了一行如下代码。
var exports = module.exports;以是上面的代码也可以写成:
// a.jsvar name = 'morrain'var age = 18exports.name = nameexports.getAge = function(){    return age}留意:exports是模块内的私有局部变量,它只是指向了module.exports,以是直接对exports赋值是无效的,如许只会让exports不再指向module.exports而已。
错误写法
// a.jsvar name = 'morrain'var age = 18exports = name6:require的根本功能:读入并实行一个js文件,然后返回该模块的exports对象,如果没有发现指定模块对报错。
7:第一次加载某模块时,nodejs会缓存该模块,以后再加载该模块,就直接从缓存取出该模块的module.exports属性返回了。
// a.jsvar name = 'morrain'var age = 18exports.name = nameexports.getAge = function(){    return age}// b.jsvar a = require('a.js')console.log(a.name) // 'morrain'a.name = 'rename'var b = require('a.js')console.log(b.name) // 'rename'第二次require(a.js)的时间,并没有重新加载去实行a.js,而是直接返回了第一次require的结果,以是我们得到的是rename。
留意:commonjs的加载机制是,require的是对导出值的深拷贝,也就是说,一旦导出了,模块之后内部再怎么厘革也不会影响该值的厘革
// a.jsvar name = 'morrain'var age = 18exports.name = nameexports.age = ageexports.setAge = function(a){    age = a}// b.jsvar a = require('a.js')console.log(a.age) // 18a.setAge(19)console.log(a.age) // 18
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2025-2-2 08:30, Processed in 0.157491 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表