1.閉包
for (var i = 0; i < 4; i++) {
setTimeout(function() {
console.log(i);
}, 300);
}
上邊打印出來的都是 4, 可能部分人會認(rèn)為打印的是 0,1,2,3
原因 : js 執(zhí)行的時(shí)候首先會先執(zhí)行主線程,異步相關(guān)的會存到異步隊(duì)列里,當(dāng)主線程執(zhí)行完畢
開始執(zhí)行異步隊(duì)列, 主線程執(zhí)行完畢后,此時(shí) i 的值為 4,說以在執(zhí)行異步隊(duì)列的時(shí)候,打印出來
的都是 4
2.快速排序
var quickSort = function(arr) {
if (arr.length <= 1) {//如果數(shù)組長度小于等于1無需判斷直接返回即可
return arr;
}
var pivotIndex = Math.floor(arr.length / 2);//取基準(zhǔn)點(diǎn)
var pivot = arr.splice(pivotIndex, 1)[0];//取基準(zhǔn)點(diǎn)的值,splice(index,1)函數(shù)可以返回?cái)?shù)組中
被刪除的那個(gè)數(shù)
var left = [];//存放比基準(zhǔn)點(diǎn)小的數(shù)組
var right = [];//存放比基準(zhǔn)點(diǎn)大的數(shù)組
for (var i = 0; i < arr.length; i++){ //遍歷數(shù)組还惠,進(jìn)行判斷分配
if (arr[i] < pivot) {
left.push(arr[i]);//比基準(zhǔn)點(diǎn)小的放在左邊數(shù)組
} else {
right.push(arr[i]);//比基準(zhǔn)點(diǎn)大的放在右邊數(shù)組
}
}
//遞歸執(zhí)行以上操作,對左右兩個(gè)數(shù)組進(jìn)行操作,直到數(shù)組長度為<=1锣光;
return quickSort(left).concat([pivot], quickSort(right));
};使用的時(shí)候,直接調(diào)用quickSort()就行了频丘。
3. 防抖函數(shù)
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.節(jié)流函數(shù)
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;
}
};
};