前端面试题总结--Js部分
- call、bind、apply的区别?
相同点:都是用来改变this的指向
不同点:
Call和apply的区别在于:
apply 第一个参数和call一样 是this的指向 但是其他的参数只能存放在数组中,放在第二个参数里面
A. apply(B, [x, y, z]);
call传入的参数 除第一个参数是this的指向,其他的参数个数不限,不用同意存放在数组中
A.call(B, x, y, z)
bind的传参参数和call保持一致,不过bind和call、apply不同的是 bind调用之后不会立即执行(会返回一个新的函数),call和apply会立即执行.
- Ajax请求的原理?
1.创建对象
val xhr=new XMLHttprequest()
2.设置请求的url 方式
xhr.open(请求的方式,请求的地址,布尔类型设置异步/同步) false设置自同步
- 发送请求
xhr.send()
- 接收响应
xhr.onreadystatechange()=function(){
If(readyState ===4&&status===200){//readyState ===4表示接收到全部数据 //status===200表示服务器成功返回页面和数据
xhr.responseText()返回请求到的数据
}
}
- 关于闭关的一系列问题
什么是闭包?
闭包就是能够访问另一个函数内部变量的函数
闭包的作用?
能够对外部活动的对象进行访问,但是外部的变量无法直接访问内部变量,防止了全局污染
能够在内部中长期保存变量
可以作为私有成员弥补了js面向对象编程的不足
闭包的缺点?
只能取到包含函数的最后的值
造成内存浪费 因为会携带闭包函数自身的作用域
- map和forEach的区别?
相同点:
都是只能用来遍历数组
都接收三个参数 (遍历的数组 数组的每一项 每一项的索引)
回调函数都指向window
都有兼容性问题
不同点:
map会返回一个新的数组,不会对原数组造成影响,forEach不会返回新数组
map的速度比foeEach的快
map可以进行链式操作,forEach不能