记录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的实现应该知道打印的结果了
相关推荐
Lvan的前端笔记3 小时前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
三天不学习3 小时前
Egg.js 4 突然爆火,原因是否归结于AI 原生落地需求爆发?
前端·javascript·全栈·egg.js
xcs194054 小时前
前端 vue 的前端页面debugger 进不去
前端·javascript·vue.js
明月_清风5 小时前
Deno 终局来了:从挑战 Node 到被 Cloudflare 收编
前端·后端·node.js
Csvn6 小时前
框架性能优化
前端
回眸&啤酒鸭7 小时前
【回眸】OpenSwarm 多智能体协作系统实战指南
大数据·前端·人工智能
用户69371750013847 小时前
2026,程序员的时代拐点到了
android·前端·后端
大龄秃头程序员7 小时前
一次 iBeacon + BLE 无感解锁方案的实现记录
前端
小兔子8 小时前
Python 的 GIL 与 free-threading:3.13 之后「去 GIL」走到哪一步了
前端
IT_陈寒8 小时前
SpringBoot自动配置差点让我加班到凌晨
前端·人工智能·后端