前端面试八股文

589 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情

题外话

这个标题我真的是想了好久,不知道怎么写才能吸引更多的人来看这篇博客,因为这篇博客绝对是我有史以来“最长最墨迹”的干货,不甘心沉入海底啊~~~~~

正文

原型链?原型?⭐⭐⭐

所有的函数都用一个prototype属性,所有的引用类型都有一个__proto__属性,__proto__属性指向它的原型对象上的prototype属性。 当我们查找一个属性的时候,在本身没有找到该属性,就会去找它的__proto__属性,也就是它的构造函数的prototype属性,就这样一直向上查找,直到找到该属性;如果查找到Object依旧没有找到,就返回null

var、let 、const的区别?

  • 从定义上来说,var声明的变量是全局变量,letconst声明的变量是块级变量,并且const声明的变量必须赋值且不能重新赋值。同一个作用域下的letconst不能声明同名变量,而var可以。
  • var声明的变量存在变量提升,会提升到作用域顶部,但是letconst因为暂时性死区的原因不能在声明前使用,所以不存在变量提升。

暂时性死区:在没有使用let或者const声明变量之前使用变量,对于变量来说就是暂时性死区

模块化??各自有什么特点?⭐⭐

  • 为什么要使用模块化?

    • 可以解决命名冲突
    • 提供复用性
    • 提高代码可维护性
  • 都有哪些方式可以实现模块化?

    • 立即执行函数,AMD、CMD(用的非常少)
    • CommonJS(require / moudule.export / exports)node
    • ES Module(export / import)ES6

# Common JS 和 ES Module的区别(require和import的区别)

  1. require支持动态导入(运行时加载)。import是静态导入(编译时加载),由于是编译时加载,import命令会提升到整个模块的顶部。
  2. require是同步导入,import是异步导入。
  3. require 在导出时是值拷贝,就算导出的值改变了,导入的值也不会改变,如果想要更新值,需要重新导入。import是实时绑定的方法,导入导出使用的是一个内存地址,所以导入的值会跟随一起改变。