1.js数据类型有哪些,有什么区别吗?
基本数据类型:String、Number、Boolean、undefined、Null、symbol,地址保存在栈中
引用数据类型:Object,地址保存在栈中,本体保存在堆中
2.谈一下你对作用域的理解
概念:规定了变量的使用范围;
分类:全局作用域、函数作用域、块级作用域,其中块作用域是ES6新增的,同时函数作用域和块作用域统称为局部作用域。
作用域链:每一层作用域就是一个执行环境,在该环境内执行程序时,会创建一个变量对象,对象包含该有属于自己的变量和函数;在当前执行环境下找不变量时,就会向上一层作用域里面寻找,具体过程还是先找到上一层的变量对象,再去里面找对应的变量,如果还是找不到,继续向上……;直到最外层的作用域,也就是全局作用域,这样就会形成一个链条,称为作用域链。
3.谈一下你对原型和原型链的理解
原型:创建一个函数,每个函数都自己的prototype属性,指向它的原型对象,原型对象会默认生成constructor属性指向构造函数,通过构造函数New出来的实例有着_proto_属性指向构造函数的原型对象;
作用:数据的共享,实现继承。
作用域链:当在访问某个对象的属性时,首先会先从当前查找有没有,如果没有则继续往prototype上面找,没有继续往上找,直到某个函数的原型是Object.prototype类对象为止
每个对象都有一个隐式原型:`__proto__`
每个函数都有一个原型对象(显示原型)
4.什么闭包以及有缺点是什么?
定义:函数里面嵌套另一个函数,里面的函数可以访问外部函数的变量。
优点:变量长期驻扎在内存中,避免了变量污染,私有成员存在。
缺点:增大内存的使用,会造成内存泄漏
5.如何改变this指向,有什么区别?
call、apply、bind,当他们第一个参数为undefined和null的话,this.dushi指向window
区别:call和apply都是立即执行的,bind是需要手动执行的;call和bind有无数个参数,apply有两个参数,第二个是数组
6.事件委托或者时间代理的原理是什么?
事件冒泡原理
7.事件冒泡和事件捕获的区别是什么?
事件冒泡:目标元素-->body-->html-->document
事件捕获:document-->html-->body-->目标元素
8.你知道的es6新特性有哪些?
1.增加了let和const
2.扩展运算符
3.模板字符串
4.属性名和属性值相同可以简写
5.类的使用
6.箭头函数
7.解构数组、对象
9.js异步编程方式有几种?
回调函数、 generate、promise、async/await
10.promise有几种状态?
pending:进行中
fulfilled:成功
reject:失败
注:可能写的不完整,望大家多提意见,谢谢!