2. Js篇
2.1 对闭包的理解?
闭包就是一个函数和他周围的环境捆绑在一块,在外部被调用了,这就是闭包。
- 闭包的作用?创建私有变量、延长变量的生命周期。
- 延长变量生命周期的办法?循环引用、计时器。
- 闭包的问题? => 内存泄漏 => 如何解决? => 在不适用闭包时,将变量赋值为
null - 闭包的使用场景?防抖和节流函数、定时器传参
2.2 对作用域链、原型链的理解?
-
作用域链
当JavaScript在使用某个变量时,会先在当前作用域寻找,如果没找到,则会去上层作用域找,直到全局。这就是作用域链
-
原型链
每个对象都有一个原型,原型也或许会有一个原型,这么一层一层的链式结构就是原型链。
2.3 继承的几种方法
- 原型链继承 => 即把子类的prototype设为new Parent() => 问题:多个子类的原型为一个原型对象,会有相互的污染情况。
- 构造函数继承 => 即在子类函数中利用call调用父类 => 问题:不能使用父类原型上的方法,只能继承属性
- 组合继承 => 即上述两种继承 => 问题:父类函数调用两次,性能低。
- 原型式继承 => 即利用Object.create()创建子类 => 问题同1,浅拷贝污染问题。
- 寄生式继承 => 原型式继承基础上添加一些方法
- 组合寄生式继承 => 即组合继承中,将子类的prototype设为Object.create(),少用一次父类,提高性能
2.4 说说对this的理解
2.5 说说Js中的执行上下文和执行栈是什么?
- 执行上下文 => 它是对于Js执行环境的一个抽象概念 => 一共有三种:全局执行上下文、函数执行上下文、Eval执行上下文(不咋用)
- 执行栈 => 执行代码时,会创建一个全局执行上下文。每当调用函数时会向执行栈中压入一个函数执行上下文。遵循先入后出的规则。
- 创建执行上下文的时候,干了什么事?
- 确定this
创建词法环境 => 组成部分
- 全局环境
- 外部环境:全局上下文是null,函数上下文是global或调用的函数。
创建变量环境:绑定var定义的变量的
2.6 说说Js中的事件模型
- 原始事件模型(DOM0级) => onclick,速度快、只支持冒泡、同类型事件只能绑定一个、删除事件设为null即可。
- 标准事件模型(DOM2级) => addEventListener,可以通过参数设置是否在捕获中执行、同类型可绑定多个。
2.7 什么是事件代理?应用场景?
- IE事件模型(不太用)