面试资料二.js基础知识点二

78 阅读1分钟

闭包

闭包正确的定义是:假如一个函数能访问外部的变量,那么就形成了一个闭包,而不是一定要返回一个函数。

let a = 1
// 产生闭包
function fn() {
  console.log(a);
}

function fn1() {
  let a = 1
  // 产生闭包
  return () => {
    console.log(a);
  }
}
const fn2 = fn1()
fn2()

常见考点

闭包能考的很多,概念和笔试题都会考。

概念题就是考考闭包是什么了。

笔试题的话基本都会结合上异步,比如最常见的:

for (var i = 0; i < 6; i++) {
  setTimeout(() => {
    console.log(i)
  })
}

深浅拷贝

浅拷贝

首先可以通过 Object.assign 来解决这个问题,这个函数会拷贝所有的属性值到新的对象中。如果属性值是对象的话,拷贝的是地址。

let a = {
  age: 1
}
let b = Object.assign({}, a)
a.age = 2
console.log(b.age) // 1

另外我们还可以通过展开运算符 ... 来实现浅拷贝:

let a = {
  age: 1
}
let b = { ...a }
a.age = 2
console.log(b.age) // 1

深拷贝

深拷贝通常可以通过 JSON.parse(JSON.stringify(object)) 来解决,这个方式基本能解决大部分情况。

递归

通过遍历的方式来改写递归。也就是如何写层序遍历(BFS)的问题

常见面试题

  • 浅拷贝和深拷贝的区别是什么
  • JSON.parse(JSON.stringify(a)) 存在什么问题
  • 手写深拷贝函数

常见面试题

  • 如何理解原型及原型链
  • 如何重写原型,这个在下一章节的继承小节中有解释
  • 原型链指向

陆续更新中...

面试大纲