温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

前端模块化常见面试题和答案

发布时间:2020-06-06 15:43:18 来源:亿速云 阅读:553 作者:Leah 栏目:编程语言

这篇文章给大家分享的是有关前端模块化常见面试题和答案。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

前端模块化常见面试题和答案

 

1、对 AMD,CMD,CommonJs 有什么理解?

 

AMD 规范即异步模块加载机制。从规范描述页面看,AMD 很短也很简单,但却完整描述了模块的定义,依赖关系,引用关系以及加载机制。 AMD 规范其实只有一个主要接口 define(id,dependencies,factory),它要在声明模块的时候指定所有的依赖dependencies,并且还要当做形参传到factory中,对于依赖的模块提前执行,依赖前置

 

define("module", ["dep1", "dep2"], function(d1, d2) { return someExportedValue;
  

});
  

require(["module", "../file"], function(module, file) { /* ... */ });
  

优点:适合在浏览器环境异步加载;并行加载多个模块。
  

缺点:提高开发成本,代码阅读和书写比较困难;不符合通用的模块思维方式,是一种妥协的实现。
  

实现:requireJS,NodeJs,Dojo,JQuery
  

CMD 规范和 AMD 相似,尽量保持简单,并且与 CommonJS 和 NodeJS 的
  

Modules 规范保持了很大的兼容性。在 CMD 中,一个模块就是一个文件, 格式为:define( factory )
  

define("module", ["dep1", "dep2"], function(d1, d2) {
  

return someExportedValue;
  

});
  

require(["module", "../file"], function(module, file) { /* ... */
  

});
  

优点:依赖就近,延迟执行;很容易在 node 中运行。
 

缺点:依赖 SPM 打包,模块的加载逻辑偏重。
  

实现:SeaJS
  

CommonJS 是在浏览器环境之外构建 JavaScript 生态系统为目标产生的项目,比如服务器和桌面环境中。CommonJS 规范是为了解决 JavaScript 的作用域问题而定义的模块形式,可以使每个模块在它自身的命名空间中执行。该规范的主要内容是:模块必须通过 module.exports 导出对外的变量或接口,通过 require()来导入其他模块的输出到当前模块。
  

//moduleA.js
  

module.exports =
  

function( value ){
  

return
  

value
  

*
  

2;

 

}
  

// moduleB.js
  

var multiplyBy2 = require('./moduleA');
  

var result = multiplyBy2(4);
  

CommonJS 是同步加载模块,一个单独的文件就是一个模块。但其实也有浏览器端的实现,其原理是将所有模块都定义好并通过 id 进行索引,
  

这样就可以浏览器进行解析了 服务器端的 Node.js 遵循 CommonJS 规范。核心思想是允许模块通过 require 方法来同步加载所要依赖的其他模块,然后通过 exports 或 module.exports 来导出需要暴露的接口。
  

require("module");
  

require("../file.js");
  

exports.doStuff = function() {};
  

module.exports = someValue;
  

优点:服务器端便于重用;NPM 中已经将近 20w 个模块包;简单并容易使用。
  

缺点:同步的模块方式不适合在浏览器环境中,同步意味着阻塞加载, 浏览器资源是异步加载的;不能非阻塞的并行加载多个模块。
  

区别:(AMD or CMD)
  

2、为什么要模块化?不用的时候和用RequireJS的时候代码该如何书写?

 

(1)方便大量的 js 脚本代码的管理维护以及团队配合开发;

 

(2)有效解决命名空间冲突及文件依赖加载顺序问题;

 

(3)有利于模块的版本管理,提高可维护性,有利于前端性能优化,跨环境共享模块。

 

3、分别说说同步和异步模块化的应用场景,说一下AMD 异步模块化实现的原理?
  

引入 JS 时会遇到需要异步加载文件,此时 require.async 便可满足异步加载需求。

 

关于前端模块化常见面试题和答案就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI