目录
9.什么是高阶函数 常见的内置高阶函数有哪些分别举例代码说明 forEach findIndex map filter 重点
16.class声明类并继承 代码描述(Father Son 属性有name age son多一个属性className)
1.EC --执行上下文(图示)
2.什么是作用域链,什么是原型链
作用域链:寻找变量的过程,链式过程
原型链:寻找属性的机制,遇到实例化对象不存在的属性时,通过__proto__逐层向上寻找
3.this的指向有哪些 4种+内置函数中的3种
默认绑定 指向 window(函数独立调用)
隐式绑定 -- 谁打点调用指向谁
显示绑定 -- call bind apply
new绑定
定时器 -- window
事件监听器 -- 事件源
forEarch -- 第二个参数可以改变this的指向
4.简述bind apply call
bind 改变this指向,但是不执行函数,调用方法bind(obj,1,2),会返回一个新函数
apply 改变this指向,执行函数,调用方法apply(obj,[1,2])
call 改变this指向,执行函数,调用方法call(obj,1,2)
5.什么是构造器,作用是什么
构造器:创建对象的构造函数(用function声明,首字母大写)
作用:构造对象,通过构造器()的方式
6.函数在js中可以充当那些角色
函数,对象,类,构造器
7.什么是原型对象,以及原型链(图示) 重点
通过构造器创建实例化对象时,会生成原型对象
是一个内存中的空间,一个对象的诞生 只有一个构造器是不行的 还需要有原型对象
8.let var const 区别
let 会提升声明但未初始化;与{}形成块级作用域;不会挂载在window上;不能重复声明;
var 会提升声明,但不能提升赋值;在函数体内声明的为局部变量,不会挂载在window上,且作用域为局部;全局变量,用var声明或者直接a=1都挂载在window上;
const 会提升声明但未初始化;与{}形成块级作用域;不会挂载在window上;是常量必须赋值,否则直接报错;无法修改;
9.什么是高阶函数 常见的内置高阶函数有哪些分别举例代码说明 forEach findIndex map filter 重点
函数的参数或者返回值为函数
arr.forEarch(function(){} --循环遍历,不改变原数组
)
arr.findIndex(function(){} --寻找元素,不改变原数组
)返回索引,如果不存在,返回-1
arr.map(function(){} --映射,返回值为新数组,不改变原数组
)
arr.filter(function(){} --过滤,返回值为新数组,不改变原数组
)
10.new的作用是什么,new做了哪些事情 重点
改变this指向
通过构造器,创建实例化对象
执行构造函数
返回一个堆空间地址,把地址给实例化对象
11.说一下js中的继承有哪些方案 关键代码描述
原生继承 Son.prototype=new Father();
call继承 Father.calll(this,name,age);
组合继承 原生继承加call继承
寄生继承 Son.prototype=Object.create(Father.prototype)
12.创建对象的方法有哪些 代码描述
字面量 var obj={}
构造函数 var obj=new Object()
自定义的构造函数
function Student(name,age){
this.name=name;
this.age=age;
}
let obj=new Student('张三',20)
工厂函数
function Student(name,age){
let stu={};
stu.name=name;
stu.age=age;
return stu;
}
let obj=Student('zhangsan',20);
13.闭包是什么以及闭包的优缺点
函数体内的变量被调用后该销毁,但是因为被内部的函数调用,导致无法销毁,并为其开辟了一个新的堆空间存放
优点:延长了变量的生命周期;扩大了变量的作用范围;保护变量
缺点:内存泄漏
14.IIFE和箭头函数 代码描述
;(function(){
})()//立即执行函数
//箭头函数
fn=()=>{}
15.代码在执行前会先进行预编译,预编译期间都做了什么事情
var 声明的全局变量,声明会提升
函数会提升,函数体内的用var 声明的变量,声明会提升到函数体内的最上面
16.class声明类并继承 代码描述(Father Son 属性有name age son多一个属性className)
class Father{
constructor(name,age){
this.name=name ;
this.age=age;
}
}
class Son extends Father{
constructor(name,age,id){
super(name,age);
this.id=id;
}
}
17.严格模式都需要基本注意哪些
必须要使用var,const,let声明变量,不能直接使用a=1,来声明变量
函数的形参不能重复声明,例如function fn(a,a,a){}
函数体内的this不会默认绑定window