记录commonjs的一道面试题

  • 如下代码,写出这段代码的导出结果
ini 复制代码
// 2.js
this.a = 1;
exports.b = 2;
exports = {
    c: 3,
}
module.exports = {
    d: 4,
}
exports.e = 5;
this.f = 6;
  • 在其他文件导入2.js,可以看到导入结果
javascript 复制代码
// 1.js
const r = require('./2');
console.log(r)
  • 看下require函数做了什么
javascript 复制代码
function require(modulePath){
    // 根据模块的url,判断模块完整的绝对路径
    var moduleId = getModuleId(modulePath);
    // 判断缓存
    if(cache[moduleId]){
        return cache[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);
    
    // 添加缓存
    cache[moduleId] = module.exports;
    
    // 返回结果
    return module.exports;
}
  • 知道require的实现应该知道打印的结果了
相关推荐
小码哥_常12 小时前
安卓开发秘籍:解锁10大性能优化秘诀
前端
try2find13 小时前
打印ascii码报错问题
java·linux·前端
郑州光合科技余经理13 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
冰暮流星14 小时前
javascript事件案例-全选框案例
服务器·前端·javascript
Csvn14 小时前
前端性能优化实战指南
前端
Moment14 小时前
2026 年,AI 全栈时代到了,前端简历别再只写前端技术了 🫠🫠🫠
前端·后端·面试
糯米团子74915 小时前
Web Worker
开发语言·前端·javascript
freewlt15 小时前
React Server Components 深度解析
前端·react.js·前端框架
wordbaby15 小时前
一次跨端 Loading 卡死复盘:把请求计数从 Axios 拦截器迁到 try/catch/finally
前端·axios
我命由我1234515 小时前
JavaScript 开发 - 获取函数名称、获取函数参数数量、获取函数参数名称
开发语言·前端·javascript·css·html·html5·js