1 . var , let , const 三种声明方式
var : 最古老,可以再定义前使用,在哪声明都会绑定到全局
let : es6 , 块级作用域,在函数里声明不会影响外部的同名变量
const : es6,声明变量的同时,必须给值,后续不可以更改,其他特性与let相同
2 . 闭包是什么?
在一个函数外部可以读取该函数内部的变量的函数,js中有全局变量和局部变量, 一个函数内部可以读取该函数外部的变量,但是在该函数外部不可以读取该函数内部的变量 .
闭包实现了从函数外部读取该函数内部的变量这种方式, 闭包会将一个函数作为返回值,此时调用该函数,就可以访问到函数内部的变量了.
3. DOM 与 BOM 区别
DOM: 是文档的对象模型
**BOM:**浏览器的对象模型
4 事件委托是什么?
本质是利用了浏览器事件的冒泡机制 , 在冒泡的过程中 会一步一步传到父节点 , 所以父节点可以通过事件对象获取到 目标节点 , 因此 把子节点的监听函数定义在父节点上,由最终的父节点 统一监听并处理多个子节点的事件
5 说出五种操作数组的方法:
- arr.splice(i,n) ;删除从索引i开始的n个元素,直接对原数组产生影响,返回值是删除的元素,数组类型
2.arr.concat(argue) ;将传入的值(数组,数字,字符串,对象)加入到arr数组的后面,生成新的数组并返回,可以连接两个或多个数组
3.str.split() 将字符串转为数组并返回,参数取决于用分隔符(""),不会影响原字符串
4.arr.sort() 修改原数组并排序,有返回值 , 如果 参数为(a,b)=>a-b 表示从小到大排序 ,为(a,b)=>b-a 则是数字降序,如果是字符串,则不穿参数是a,b,c顺序,可以利用reverse取反数组
5.arr.reverse() 直接反转原数组,有返回值
6.arr.forEach((当前值,下标,所在数组)=>{}) 无返回值
7.arr.find(callback) 返回第一个满族条件的值
8.arr.findIndex(callback) 返回第一个满族条件的值的下标
6 作用域 和 作用域链
作用域 : 定义变量的区域,他有一套访问变量的规则,这套规则用来管理浏览器引擎如何在当前作用域以及嵌套的作用域中,根据变量进行变量查找
作用域链 : 保证对执行环境 内 有权访问的所有变量和函数的 有序访问 ,通过作用域链可以访问到外层环境的变量和函数
7 js 数据类型
undefined, null , boolean , number ,string,symbol,bigint , 引用数据类型object
8 判断数据类型的方法
typeof
object.propotype.tostring.call()
instanceof
constructor
9 {},[] 的tostring 和valueof 结果分别是什么
{}的tostring 是"[object,object]" , {} 的valueof 是 {}
[]的tostring 是 “” , []的valueof 是[]