1.用argument.callee()实现匿名函数的递归;
var i = 0;
(function () {
     if (i < 10) {
        console.log(i);
        i++;
        arguments.callee();
    }
})()
 
 2.冒泡排序:
var arr = [5, 7, 6, 2, 0, 8, 1, 4, 3];
for (i = 0; i < arr.length; i++) {
    for (j = i + 1; j < arr.length; j++) {
        if (arr[i] > arr[j]) {
            var temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
}
 
3.打擂算法:
var arr = [5, 7, 6, 2, 0, 8, 1, 4, 3];
var master = arr[0];
for (var i = 0; i < arr.length; i++) {
    if (arr[i] > master) {
        master = arr[i];
    }
}
console.log(master);//8
 
4.数组去重:
//(1)高效去重,
var arr = [1, 1, 3, 3, 3, 4, 4, 5, 5, 6, 4, 2, 3, 3]
var newArr =[...new Set(arr)];//一行代码去重
console.log(newArr);
//(2)新建容器,查询之后push元素达到去重的目的
var arr1 = [];
for (var i = 0; i < arr.length; i++) {
    if (arr1.indexOf(arr[i]) == -1) {
        arr1.push(arr[i])
    }
}
console.log(arr1);
 
5.封装取随机数的函数
function getRand(a, b) {
    return Math.floor(Math.random() * (b - a + 1)) + a;
}
console.log(getRand(2, 9));
 
6.随机取不重复数组
var arr = [];//容器
var data = [];//奖池
for (var i = 0; i < 10; i++) {
    data.push(i)//先把可能随机到的所有数据全部放入一个data数组

}
for (var i = 0; i < 10; i++) {//每次随机从data里选取一个元素,选取之后把它从data里删除,防止下次再次选中这个元素
    var index = Math.floor(Math.random() * data.length);
    arr.push(data[index]);//通过随机下标选择data里面的元素
    data.splice(index, 1);//删除data中被选中的元素
}
console.log(arr);
 
7.回到顶部效果
var oDiv = document.getElementById("fixed");
oDiv.onclick = function () {
    document.documentElement.scrollTop = 0;//点击div设置页面的卷去偏移为0(相当于回到页面最顶部)
}
 
8.拖拽效果
var oDiv = document.getElementById('div1');
oDiv.onmousedown = function (ev) {
    var ev = ev || window.event;
    var disX = ev.clientX - this.offsetLeft;
    var disY = ev.clientY - this.offsetTop;
    document.onmousemove = function (ev) {
        var ev = ev || window.event;
        oDiv.style.left = ev.clientX - disX + 'px';
        oDiv.style.top = ev.clientY - disY + 'px';
    }
    document.onmouseup = function () {
        document.onmousemove = null;
        document.onmouseup = null;
    }
}
 
9.经典闭包理解
function show() {
    var x = 10;
    function abc() {
        x++;
        console.log(x);
    }
    return abc;
}
var fn = show();//fn就是show调用以后拿到的闭包abc
fn();//11
fn();//12
 
10.事件委托
var oUl = document.getElementById("ul");
var aLi = oUl.children;
var oBtn = document.getElementById("btn");
oBtn.addEventListener('click', function () {
    var oLi = document.createElement('li');
    oLi.innerHTML = '我是新来的';
    oUl.appendChild(oLi);
})
oUl.addEventListener('click', function (ev) {//给父元素ul添加事件
    var ev = ev || window.event;
    var et = ev.target || ev.srcElement;
    if (ev.target.nodeName == 'LI') {//通过事件源锁定子元素
        for (var i = 0; i < aLi.length; i++) {
            aLi[i].style.background = '';
        }
        et.style.background = 'red';
    }
})
 
11.加千分号
//(1)字符串截取
function addThousands(num) {
    var num = (num || 0).toString();
    var result = '';
    while (num.length > 3) {
        result = ',' + num.slice(-3) + result;
        num = num.slice(0, num.length - 3)
    }
    if (num) { result = num + result; }
    return result;
}
console.log(addThousands(1234567890));
//(2)正则表达式
var str = '1234567890';
var re = /\B(?=(\d{3})+\b)/g;
var str1 = (str.replace(re, ','));
console.log(str1);
 
12.对象的缓存(object,arr,function都是引用类型)-引用类型不能直接赋值,否则就相当于是复制了一下地址
//(1)数组缓存
var arr = [1, 2, 4, 5, 6, 4];
var arr2 = [];
for (var i = 0; i < arr.length; i++) {
    arr2.push(arr[i]);
}
for (var i = 0; i < 6; i++) {
    arr2.pop();
}
console.log(arr);
console.log(arr2);
//(2)对象的深拷贝(obj继承obj1)
function deepClone(obj, obj1) {
    for (var prop in obj1) {
        if (typeof obj1[prop] != 'object') {
            obj[prop] = obj1[prop];
        } else {//如果循环到的属性值是object类型,那么再进行依次浅拷贝
            obj[prop] = deepClone(obj[prop], obj1[prop]);
        }
    }
    return obj
}

 

  
 
  
 
posted on 2020-05-24 20:18  固执的鱼wu  阅读(202)  评论(0)    收藏  举报