Nodejs基础之JavaScript模块化(一),干货面试教程

67 阅读6分钟

| 🔥Nodejs冲浪笔记 | 地址 |

| --- | --- |

| 🔥Nodejs基础之JavaScript模块化(一) | blog.csdn.net/Augenstern_… |

| 🔥nodejs基础之包管理工具npm(二) | blog.csdn.net/Augenstern_… |

| 🔥Nodejs基础之常用模块(三) | blog.csdn.net/Augenstern_… |

| 🔥Nodejs基础之Express框架和art-template引擎(四) | blog.csdn.net/Augenstern_… |

1、JavaScript模块化

=================================================================================

什么是模块化开发呢?

  • 事实上模块化开发最终的目的是将程序划分成一个个小的结构

  • 这个结构中编写属于自己的逻辑代码,有自己的作用域,不会影响到其他的结构

  • 这个结构可以将自己希望暴露的变量、函数、对象等导出给其结构使用

  • 也可以通过某种方式,导入另外结构中的变量、函数、对象等

上面说提到的结构,就是模块;按照这种结构划分开发程序的过程,就是模块化开发的过程

1.1、CommonJS


我们需要知道CommonJS是一个规范,最初提出来是在浏览器以外的地方使用,并且当时被命名为ServerJS,后来为了体现它的广泛性,修改为CommonJS,平时我们也会简称为CJS。

  • Node是CommonJS在服务器端一个具有代表性的实现

  • Node中对CommonJS进行了支持和实现,让我们在开发node的过程中可以方便的进行模块化开发

  • 在Node中每一个js文件都是一个单独的模块

  • 这个模块中包括 CommonJS规范的核心变量:exports、module.exports、require

  • 我们可以使用这些变量来方便的进行模块化开发

模块化的核心是导出和导入,Node中对其进行了实现:

  • exportsmodule.exports可以负责对模块中的内容进行导出

  • require 函数可以帮助我们导入其他模块(自定义模块、系统模块、第三方库模块)中的内容

1.2、自定义模块的规定


  1. 我们可以把公共的功能抽离成为一个单独的 js 文件作为一个模块,Node.js规定一个 JavaScript 文件就是一个模块,模块内部定义的变量和函数默认情况下外部无法得到。如果要让外部可以访问模块里面的方法或属性,就必须在模块里面通过exports 或者 module.exports 暴露属性或者方法

  2. 在需要使用这些模块的文件中,通过 require 的方式引入这个模块。这个时候就可以使用模块里面暴露的属性和方法

在这里插入图片描述

注意:

  • require 里面的路径要加 单引号

  • require 里面引入的模块可以跟后缀 .js,也可以不跟后缀 .js

  • 若我们要暴露的是对象(属性),则建议使用 module.exports ;若我们要暴露的是方法,则建议使用exports

在这里插入图片描述

在这里插入图片描述

  • 我们以后的自定义模块都会放在 node_modules 文件夹下,此时引入不需要添加 node_modules 路径也可以引入

在这里插入图片描述

1.3、ES Module


JavaScript没有模块化一直是它的痛点,所以才会产生我们前面学习的社区规范:CommonJS、AMD、CMD等,

所以在ES推出自己的模块化系统时,大家也是兴奋异常。

ES Module和CommonJS的模块化有一些不同之处:

  • 一方面它使用了import和export关键字

  • 另一方面它采用编译期的静态分析,并且也加入了动态引用的方式

ES Module模块采用export和import关键字来实现模块化

  • export负责将模块内的内容导出

  • import负责从其他模块导入内容

1.4、export关键字


export关键字将一个模块中的变量、函数、类等导出

  • export 指令用于导出变量,比如下面的代码

// info.js

export let name = 'why'

export let age = 18

export let height = 1.88

  • 上面的代码还有另外一种写法

// info.js

let name = 'why'

let age = 18

let height = 1.88

export{name,age,height}

1.5、导出函数或类


上面我们主要是输出变量,也可以输出函数或者输出类

export function test(content){

console.log(content);

}

export class Person {

constructor(name,age){

this.name = name;

this.age = age

}

run(){

console.log(this.name + '在奔跑');

}

}

  • 上面的代码也可以写成这种形式

function test(content) {

console.log(content);

}

class Person {

constructor(name,age) {

this.name = name;

this.age = age;

}

run() {

console.log(this.name + '在奔跑')

}

}

export {test,Person}

这里分享一份由字节前端面试官整理的「2021大厂前端面试手册」,内容囊括Html、CSS、Javascript、Vue、HTTP、浏览器面试题、数据结构与算法。全部整理在下方文档中,共计111道

HTML

  • HTML5有哪些新特性?

  • Doctype作⽤? 严格模式与混杂模式如何区分?它们有何意义?

  • 如何实现浏览器内多个标签页之间的通信?

  • ⾏内元素有哪些?块级元素有哪些? 空(void)元素有那些?⾏内元 素和块级元素有什么区别?

  • 简述⼀下src与href的区别?

  • cookies,sessionStorage,localStorage 的区别?

  • HTML5 的离线储存的使用和原理?

  • 怎样处理 移动端 1px 被 渲染成 2px 问题?

  • iframe 的优缺点?

  • Canvas 和 SVG 图形的区别是什么?

JavaScript

  • 问:0.1 + 0.2 === 0.3 嘛?为什么?

  • JS 数据类型

  • 写代码:实现函数能够深度克隆基本类型

  • 事件流

  • 事件是如何实现的?

  • new 一个函数发生了什么

  • 什么是作用域?

  • JS 隐式转换,显示转换

  • 了解 this 嘛,bind,call,apply 具体指什么

  • 手写 bind、apply、call

  • setTimeout(fn, 0)多久才执行,Event Loop

  • 手写题:Promise 原理

  • 说一下原型链和原型链的继承吧

  • 数组能够调用的函数有那些?

  • PWA使用过吗?serviceWorker的使用原理是啥?

  • ES6 之前使用 prototype 实现继承

  • 箭头函数和普通函数有啥区别?箭头函数能当构造函数吗?

  • 事件循环机制 (Event Loop)

开源分享:docs.qq.com/doc/DSmRnRG…