模块化考试题

一、 选择题(均为单选题,每小题6分,共8题, 48分)

 
1. 关于模块化说法错误的是(  C  )
A. 解决了依赖关系混乱的问题
B. 解决了全局变量污染的问题
C. 解决了JS文件数量增加后导致传输缓慢的问题
D. 使得功能划分更加精细,工程更加便于维护
 
2. 常见的模块化规范不包含(  C  )
A. CommonJS    
B. AMD
C. require.js    
D. ES6 模块化
 
3. CommonJS的特点不包含(   D )
A. 不污染全局变量    
B. 使用exports导出    
C. 可以导出任意类型的数据    
D. 使用import导入
 
4. 如果使用CommonJS导入下面的模块,导入的结果类型是(  B  )

exports.a = 1;
exports.b = "";
module.exports = function a () {};
exports.c = true;

A. number    
B. function    
C. object    
D. udefined
 
5. ES6中的基本导出和默认导出说法正确的是(  A )
A. 基本导出可以有多个,默认导出只能有一个
B. 如果使用*导入整个模块,只包含基本导出
C. 默认导出无法使用基本导出的格式
D. 基本导出和默认导出无法共存
 
6. CommonJS难以应用到浏览器端,主要的困难是( A   )
A. CommonJS的导入是同步,而浏览器获取JS文件是异步的
B. CommonJS缺乏多种导出方式
C. 浏览器难以实现缓存
D. 浏览器无法识别入口文件
 
7. 从下面的ES6模块中,导入a、b和默认,下面的代码正确的是(   C  )

export var a = 1;
export var b = 2;
export var c = 3;

export function d () {};

export default {
    a: 1,
  b: 2,
  c: 3,
}

A. import a, b, default from “./module.js”
B. import default, {a, b} from “./module.js”
C. import c, {a, b} from “./module.js”
D. import {a, b, c as default} from “./module.js”
 
8. 对于 import "./a.js",说法正确的是( C  )
A. 模块a中一定没有任何导出
B. 在非首次导入时,该语句一定会导致模块a中的代码执行一次
C. 该语句没有从a模块中导入任何内容
D. 该语句语法是错误的
 
 

二、填空题(每空2分,共6空, 12分)

commonJS使用函数_require___对模块进行导入。函数的参数是模块路径,在node环境中,如果要导入本地模块,路径必须以___./______../____开头,这一点,和ES6的标准一致。

浏览器为了实现ES6模块化,同时兼容之前的应用程序,因此选择在引入js文件的script元素中添加 type="module____",来代表引入的是一个模块。

在ES6模块内部,使用 exportmodule__数据,来实现默认导出,使用import____变量名 from "模块路径"来导入一个模块。
 
 

三、简答题(共2题,每题20分, 40分)

 
1. 阐述模块化(非ES6模块化)应用到浏览器端需要解决哪些问题,如何解决?
 
浏览器端实现模块化需要解决两个问题:

  1. 浏览器读取JS文件是异步,如何使用异步的方式获取一个模块
  2. 如何避免模块中的全局代码污染全局变量

针对第一个问题,可以使用回调或Promise的方式解决
针对第二个问题,可以手动的将模块放入到函数环境中,避免全局变量的污染

2. ES6模块化和CommonJS模块化有哪些区别?
 

  1. CommonJS是依赖延迟声明,ES6是依赖预声明
  2. CommonJS最终只能依靠module.exports导出,ES6可以有基本导出和默认导出两种方式
  3. CommonJS没有绑定再导出的功能,而ES6可以使用 export ... from ... 进行绑定再导出