记录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的实现应该知道打印的结果了
相关推荐
落魄江湖行2 分钟前
入门篇二:Nuxt 4路由自动生成:告别手动配置路由的日子
前端·vue.js·typescript·nuxt4
CQU_JIAKE1 小时前
4.4【Q】
java·前端·javascript
小陈工1 小时前
Python Web开发入门(十二):使用Flask-RESTful构建API——让后端开发更优雅
开发语言·前端·python·安全·oracle·flask·restful
木斯佳1 小时前
前端八股文面经大全:字节前端一面(2026-04-03)·面经深度解析
前端·面试题·面经
xiaotao1311 小时前
第八章:实战项目案例
前端·vue.js·vite·前端打包
We་ct1 小时前
JS手撕:性能优化、渲染技巧与定时器实现
开发语言·前端·javascript·面试·性能优化·定时器·性能
taWSw5OjU1 小时前
vue对接海康摄像头-H5player
开发语言·前端·javascript
huwuhang2 小时前
跨平台电子书阅读器 | Readest最新版 安卓版+PC版全平台
android·前端·javascript
C澒2 小时前
AI 生码:RAG 检索优化实现可评估、可回溯工程化
前端·ai编程
条tiao条2 小时前
不止语法糖:TypeScript Set 与 Map 深度解析
前端·javascript·typescript