JS面试题

 
1、javascript中的变量提升和函数提升
使用var变量会引起提升,let和const不会
变量提升会将变量声明提升到函数top,并不会把赋值提升上来
函数提升会将整个函数提升上去
 
2、闭包
有权访问另一个函数作用域内变量的函数都是闭包,闭包就是一个函数引用另外一个函数的变量,因为变量被引用着所以不能回收,因此可以用来封装一个私有变量,将变量的值始终保持在内存中
 
3、阻止默认行为
evnt.preventDefault();
 
4、阻止时间冒泡
event.stopPropagation();
 
5、深拷贝与浅拷贝
深拷贝:拷贝实例;浅拷贝:拷贝引用
如果元素是基本类型(undefind,null,boolean,number,string),就会拷贝一份新的;如果元素是数组或对象,就只拷贝引用
使用json.parse(json.stringify())来实现深拷贝
 
6、extend与concat
$.extend({},ojd) 用来合并数组
Array.prototype.concat  合并数组
 
7、数组方法map(映射),reduce(规约),foreach(遍历),filter(过滤)
map()方法返回一个由原数组中每一个元素调用一个指定方法后返回的新数组
reduce()方法接受一个函数作为累加器,数组中的每一个值开始缩减,最终为一个值。最终的返回结果为一个值
foreach() 遍历数组方法
filter() 方法使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组
 
map,filter都是生成一个新数组,不同的是map处理的方法里面returen 新数值,filter里面return true/false 
 
8、js判断一个对象是不是Array
  1. Array.isArray(obj)  //调用数组的isArray方法
  2. obj instanceof Array  //判断对象是否是Array的实例
  3. Object.prototype.toString.call(obj)==='[object Array]'  //使用原型链方式,改变this为校验对象
 
 
 
 
posted @ 2018-06-05 18:19  寂寞之砂  阅读(89)  评论(0编辑  收藏  举报