持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情
题外话
这个标题我真的是想了好久,不知道怎么写才能吸引更多的人来看这篇博客,因为这篇博客绝对是我有史以来“最长最墨迹”的干货,不甘心沉入海底啊~~~~~
正文
原型链?原型?⭐⭐⭐
所有的函数都用一个prototype属性,所有的引用类型都有一个__proto__属性,__proto__属性指向它的原型对象上的prototype属性。
当我们查找一个属性的时候,在本身没有找到该属性,就会去找它的__proto__属性,也就是它的构造函数的prototype属性,就这样一直向上查找,直到找到该属性;如果查找到Object依旧没有找到,就返回null。
var、let 、const的区别?
- 从定义上来说,
var声明的变量是全局变量,let和const声明的变量是块级变量,并且const声明的变量必须赋值且不能重新赋值。同一个作用域下的let和const不能声明同名变量,而var可以。 var声明的变量存在变量提升,会提升到作用域顶部,但是let和const因为暂时性死区的原因不能在声明前使用,所以不存在变量提升。
暂时性死区:在没有使用let或者const声明变量之前使用变量,对于变量来说就是暂时性死区
模块化??各自有什么特点?⭐⭐
-
为什么要使用模块化?
- 可以解决命名冲突
- 提供复用性
- 提高代码可维护性
-
都有哪些方式可以实现模块化?
- 立即执行函数,AMD、CMD(用的非常少)
- CommonJS(require / moudule.export / exports)node
- ES Module(export / import)ES6
# Common JS 和 ES Module的区别(require和import的区别)
- require支持动态导入(运行时加载)。import是静态导入(编译时加载),由于是编译时加载,import命令会提升到整个模块的顶部。
- require是同步导入,import是异步导入。
- require 在导出时是值拷贝,就算导出的值改变了,导入的值也不会改变,如果想要更新值,需要重新导入。import是实时绑定的方法,导入导出使用的是一个内存地址,所以导入的值会跟随一起改变。