前端面试题总结--Js部分

64 阅读2分钟
  1. 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会立即执行.
  2. Ajax请求的原理? 1.创建对象 val xhr=new XMLHttprequest() 2.设置请求的url 方式 xhr.open(请求的方式,请求的地址,布尔类型设置异步/同步) false设置自同步
  3. 发送请求 xhr.send()
  4. 接收响应 xhr.onreadystatechange()=function(){ If(readyState ===4&&status===200){//readyState ===4表示接收到全部数据 //status===200表示服务器成功返回页面和数据 xhr.responseText()返回请求到的数据 } }
  5. 关于闭关的一系列问题 什么是闭包? 闭包就是能够访问另一个函数内部变量的函数 闭包的作用? 能够对外部活动的对象进行访问,但是外部的变量无法直接访问内部变量,防止了全局污染 能够在内部中长期保存变量 可以作为私有成员弥补了js面向对象编程的不足 闭包的缺点? 只能取到包含函数的最后的值 造成内存浪费 因为会携带闭包函数自身的作用域
  6. map和forEach的区别? 相同点: 都是只能用来遍历数组 都接收三个参数 (遍历的数组 数组的每一项 每一项的索引) 回调函数都指向window 都有兼容性问题 不同点: map会返回一个新的数组,不会对原数组造成影响,forEach不会返回新数组 map的速度比foeEach的快 map可以进行链式操作,forEach不能