前端常见面试题

1.闭包
for (var i = 0; i < 4; i++) {
setTimeout(function() {
console.log(i);
}, 300);
}
上边打印出来的都是 4, 可能部分人会认为打印的是 0,1,2,3
原因 : js 执行的时候首先会先执行主线程,异步相关的会存到异步队列里,当主线程执行完毕
开始执行异步队列, 主线程执行完毕后,此时 i 的值为 4,说以在执行异步队列的时候,打印出来
的都是 4
2.快速排序
var quickSort = function(arr) {
   if (arr.length <= 1) {//如果数组长度小于等于1无需判断直接返回即可
return arr;
}
   var pivotIndex = Math.floor(arr.length / 2);//取基准点
   var pivot = arr.splice(pivotIndex, 1)[0];//取基准点的值,splice(index,1)函数可以返回数组中
被删除的那个数
   var left = [];//存放比基准点小的数组
   var right = [];//存放比基准点大的数组
   for (var i = 0; i < arr.length; i++){ //遍历数组,进行判断分配
     if (arr[i] < pivot) {
       left.push(arr[i]);//比基准点小的放在左边数组
     } else {
       right.push(arr[i]);//比基准点大的放在右边数组
     }
   }
//递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1;
   return quickSort(left).concat([pivot], quickSort(right));
};使用的时候,直接调用quickSort()就行了。

 3. 防抖函数
       const debounce = (func, wait = 200) => {
       let timer;
       return function () {
       let context = this; // 注意 this 指向
       let args = arguments; // arguments中存着e
       if (timer) clearTimeout(timer);
       timer = setTimeout(() => {
            func.apply(this, args);
        }, wait);

};
};

4.节流函数
const throttle = (func, wait = 200) => {
let prev = new Date().getTime();
return function (...args) {
let now = new Date().getTime();
if (now - prev >= wait) {
func();
prev = now;
}
};
};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,…,an 输...
    code武阅读 683评论 0 0
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,879评论 1 45
  • 如何控制alert中的换行?\n alert(“p\np”); 请编写一个JavaScript函数 parseQu...
    heyunqiang99阅读 1,105评论 0 6
  • 1、js有哪些数据类型 基本数据类型:String,Boolean, Number, Null, Undefine...
    pauljun阅读 649评论 0 5
  • 0.New 的执行过程大致如下: 创建一个对象 将对象的 _ proto_ 指向 构造函数的 prototype ...
    blank的小粉er阅读 7,109评论 2 18