记录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的实现应该知道打印的结果了
相关推荐
初願致夕霞7 分钟前
五种IO模型(详解非阻塞IO与多路转接)
linux·前端·网络·数据库·tcp/ip
深圳多奥智能一卡(码、脸)通系统9 分钟前
智能梯控SDK可直接用于第三方开发对接的接口文档说明书
服务器·前端·算法
烂蜻蜓18 分钟前
Flask入门教程(十五):错误处理与日志——打造健壮的Web应用
前端·python·flask
深念Y25 分钟前
浏览器缩放检测的前端通用方案
前端
风骏时光牛马33 分钟前
AIAgent异常故障根因分析与复盘总结
前端
weixin_4316004434 分钟前
前端数据埋点(7):Web Vitals——页面慢不慢,不是再包一层 fetch
前端·性能优化·sentry·数据埋点
এ慕ོ冬℘゜2 小时前
前端实战:jQuery实现动态表格渲染与状态切换功能
前端·javascript·jquery
jay神3 小时前
【计算机毕业设计】基于Flask+Vue的电影数据可视化与智能推荐系统
前端·vue.js·python·信息可视化·flask·毕业设计·课程设计
FreeTinker9 小时前
HTML本地存储技术解析:localStorage与sessionStorage的原理、差异与应用场景
前端·html
qq_452396239 小时前
第十二篇:《全链路监控与可观测性:前端错误追踪与性能分析》
前端