function require(modulePath){ // 根据传递的模块路径获取模块id var moduleId = getModuleId(modulePath); if(caches[moduleId]){ return caches[moduleId]; } function _require(exports,require,module,__filename,__dirname){ // 目标模块的代码 } var module = { exports:{} } var exports = module.exports var __filename = moduleId var __dirname = getDirname(__filename) _require.call(exports,exports,require,module,__filename,__dirname) caches[moduleId] = module.exports return module.exports } 这是模仿require函数写的代码
他会将所有代码转换为requre函数的代码
在1.js 里面打印arguments来进行验证
require函数里面有5个参数就是arguments的这几个
另外在初始化时exports module.exports this三个是相等的
// index.js中
console.log(module.exports === exports,exports === this) // this // { // a:1, // b:2, // f:6 // } // exports = { // c:3,e:5 // } // module.exports = { // d:4 // } this.a = 1; exports.b = 2 exports = { c:3 } module.exports = { d:4 } exports.e = 5 this.f = 6 console.log(this,exports,module.exports)
// 2.js中 const r = require('./index.js') console.log(r)true true { a: 1, b: 2, f: 6 } { c: 3, e: 5 } { d: 4 } { d: 4 }
标签:__,commonjs,require,exports,module,var,moduleId From: https://www.cnblogs.com/MDGE/p/18591052