面试内容带答案版

67 阅读2分钟

2. Js篇

2.1 对闭包的理解?

闭包就是一个函数和他周围的环境捆绑在一块,在外部被调用了,这就是闭包。

  1. 闭包的作用?创建私有变量、延长变量的生命周期。
  2. 延长变量生命周期的办法?循环引用、计时器。
  3. 闭包的问题? => 内存泄漏 => 如何解决? => 在不适用闭包时,将变量赋值为null
  4. 闭包的使用场景?防抖和节流函数、定时器传参

2.2 对作用域链、原型链的理解?

  1. 作用域链

    当JavaScript在使用某个变量时,会先在当前作用域寻找,如果没找到,则会去上层作用域找,直到全局。这就是作用域链

  2. 原型链

每个对象都有一个原型,原型也或许会有一个原型,这么一层一层的链式结构就是原型链。

2.3 继承的几种方法

  1. 原型链继承 => 即把子类的prototype设为new Parent() => 问题:多个子类的原型为一个原型对象,会有相互的污染情况。
  2. 构造函数继承 => 即在子类函数中利用call调用父类 => 问题:不能使用父类原型上的方法,只能继承属性
  3. 组合继承 => 即上述两种继承 => 问题:父类函数调用两次,性能低。
  4. 原型式继承 => 即利用Object.create()创建子类 => 问题同1,浅拷贝污染问题。
  5. 寄生式继承 => 原型式继承基础上添加一些方法
  6. 组合寄生式继承 => 即组合继承中,将子类的prototype设为Object.create(),少用一次父类,提高性能

2.4 说说对this的理解

2.5 说说Js中的执行上下文和执行栈是什么?

  1. 执行上下文 => 它是对于Js执行环境的一个抽象概念 => 一共有三种:全局执行上下文、函数执行上下文、Eval执行上下文(不咋用)
  2. 执行栈 => 执行代码时,会创建一个全局执行上下文。每当调用函数时会向执行栈中压入一个函数执行上下文。遵循先入后出的规则。
  3. 创建执行上下文的时候,干了什么事?
  • 确定this

创建词法环境 => 组成部分

  • 全局环境
  • 外部环境:全局上下文是null,函数上下文是global或调用的函数。

创建变量环境:绑定var定义的变量的

2.6 说说Js中的事件模型

  1. 原始事件模型(DOM0级) => onclick,速度快、只支持冒泡、同类型事件只能绑定一个、删除事件设为null即可。
  2. 标准事件模型(DOM2级) => addEventListener,可以通过参数设置是否在捕获中执行、同类型可绑定多个。

2.7 什么是事件代理?应用场景?

  1. IE事件模型(不太用)