<!-- 快速排序 -->
<script>
var arr = [9, 8, 7];
function quick(arr) {
if (arr.length <= 1) return arr;
var middle = arr.splice(Math.floor(arr.length / 2), 1)[0]
var left = [];
var right = []
for (var i = 0; i < arr.length; i++) {
if (middle < arr[i]) {
left.push(arr[i])
} else {
right.push(arr[i]) }
}
return quick(left).concat(middle, quick(right))
}
// 闭包
/*
闭包:可以访问其他函数内部变量的函数 函数套函数
优点:缓存数据 可以扩大变量的作用域范围
缺点:会造成内存泄漏 不用的时候不会被回收
*/
function outer() {
var a = 10;
function inner() {
a++;
console.log(a);
}
return inner
}
var info1 = outer();// info1就是inner函数
info1();//11
info1();//12
info1();//13
// 不用的时候 手动回收
info1 = null;
/*
闭包的使用场景:
1.可以扩大变量的作用域
2.解决全局作用域问题
*/
for (var i = 0; i < li.length; i++) {
(function (i) {
li[i].onclick = function () {
//是无法拿到对应的下标
console.log(i);//10 }
})(i)
}
//i = 10
/*
防抖和节流
就是为了减少事件频率的发生
防抖:
在一个事件中 添加一个延时定时器 延迟一定的时间执行代码
如果在定时器执行的过程中再次触发 定时器从头开始计时(把之前的定时器清除,重新定义一个)
节流:
在一个事件中 添加一个延时定时器 延迟一定的时间再执行代码
如果在定时器执行的过程中再次触发 事件状态是禁用的 当定时器完成之后 事件状态解开
*/
var timer;
window.onscroll = function () {
if (timer) { //timer有定时器id 意味着定时器没有执行完
clearInterval(timer)
}
// 判断定时器有没有完成
timer = setTimeout(function () {
// 直接写逻辑
}, 500)
}
var timer;
window.onscroll = function () {
if (!timer) {
timer = setTimeout(function () {
//执行的代码
timer = undefined;
}, 500)
}
}
/*
冒泡排序:相邻的2个数作比较
当前这个数 arr[j] arr[j+1]
*/
var arr = [0, 4, 1, 9, 10];
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] < arr[j+1]) {
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
/*
选择排序:用当前这个数 依次和后面的数做对比
*/
for(var i = 0;i<arr.length;i++){
for(var j = i+1;j<arr.length;j++){
if(arr[i] > arr[j]){
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
</script>