17K star 仓库,解决 90% 的大厂基础面试题( 三 )


因此笔者对于原始类型存储位置的理解为:局部变量才是被存储在栈上,全局变量存在静态区域上,其它都存储在堆上 。
当然这个理解是建立的 Chrome 的表现之上的,在不同的浏览器上因为引擎的不同,可能存储的方式还是有所变化的 。
常见考点闭包能考得很多,概念和笔试题都会考 。
概念题就是考考闭包是什么了 。
笔试题的话基本都会结合上异步,比如最常见的:
for (var i = 0; i < 6; i++) {setTimeout(() => {console.log(i)})}这道题会问输出什么,有哪几种方式可以得到想要的答案?
newnew 操作符可以帮助我们构建出一个实例,并且绑定上 this,内部执行步骤可大概分为以下几步:

  1. 新生成了一个对象
  2. 对象连接到构造函数原型上,并绑定 this
  3. 执行构造函数代码
  4. 返回新对象
在第四步返回新对象这边有一个情况会例外:
function Test(name) {this.name = nameconsole.log(this) // Test { name: 'yck' }return { age: 26 }}const t = new Test('yck')console.log(t) // { age: 26 }console.log(t.name) // 'undefined'当在构造函数中返回一个对象时,内部创建出来的新对象就被我们返回的对象所覆盖,所以一般来说构建函数就别返回对象了(返回原始类型不影响) 。
常见考点
  • new 做了哪些事?
  • new 返回不同的类型时会有什么表现?
  • 手写 new 的实现过程
作用域作用域可以理解为变量的可访问性,总共分为三种类型,分别为:
  • 全局作用域
  • 函数作用域
  • 块级作用域,ES6 中的 let、const 就可以产生该作用域
其实看完前面的闭包、this 这部分内部的话,应该基本能了解作用域的一些应用 。
一旦我们将这些作用域嵌套起来,就变成了另外一个重要的知识点「作用域链」,也就是 JS 到底是如何访问需要的变量或者函数的 。
首先作用域链是在定义时就被确定下来的,和箭头函数里的 this 一样,后续不会改变,JS 会一层层往上寻找需要的内容 。
其实作用域链这个东西我们在闭包小结中已经看到过它的实体了:[[Scopes]]
图中的 [[Scopes]] 是个数组,作用域的一层层往上寻找就等同于遍历 [[Scopes]] 。
常见考点
  • 什么是作用域
  • 什么是作用域链
原型原型在面试里只需要几句话、一张图的概念就够用了,没人会让你长篇大论讲上一堆内容的,问原型更多的是为了引出继承这个话题 。
根据上图,原型总结下来的概念为:
  • 所有对象都有一个属性 __proto__ 指向一个对象,也就是原型
  • 每个对象的原型都可以通过 constructor 找到构造函数,构造函数也可以通过 prototype 找到原型
  • 所有函数都可以通过 __proto__ 找到 Function 对象
  • 所有对象都可以通过 __proto__ 找到 Object 对象
  • 对象之间通过 __proto__ 连接起来,这样称之为原型链 。当前对象上不存在的属性可以通过原型链一层层往上查找,直到顶层 Object 对象,再往上就是 null 了
常见考点
  • 聊聊你理解的原型是什么
继承即使是 ES6 中的 class 也不是其他语言里的类,本质就是一个函数 。
class Person {}Person instanceof Function // true其实在当下都用 ES6 的情况下,ES5 的继承写法已经没啥学习的必要了,但是因为面试还会被问到,所以复习一下还是需要的 。
首先来说下 ES5 和 6 继承的区别:
  1. ES6 继承的子类需要调用 super() 才能拿到子类,ES5 的话是通过 apply 这种绑定的方式
  2. 类声明不会提升,和 let 这些一致
接下来就是回字的几种写法的名场面了,ES5 实现继承的方式有很多种,面试了解一种已经够用:
function Super() {}Super.prototype.getNumber = function() {return 1}function Sub() {}Sub.prototype = Object.create(Super.prototype, {constructor: {value: Sub,enumerable: false,writable: true,configurable: true}})let s = new Sub()s.getNumber()常见考点


推荐阅读