手写节流 、防抖 、AJAX

56 阅读1分钟

节流

const throttle = (fn, time) => {
    let aaa = false
    return (...args) => {
        if(aaa) retur
        fn.call(undefined, ...args)
        aaa = true
        setTimeout(()=>{
            aaa = false
        }, time)
    }
}

//use : 
const f = throttle(()=>{console.log('hi')}, 3000)
f() // 打印 hi

防抖

const debounce = (fn, time) => {
    let aaa = null
    return (...args)=>{
        if(aaa !== null) {
            clearTimeout(aaa) // 取消
        }
        aaa = setTimeout(()=>{
            fn.call(undefined, ...args) // 调用 fn
            aaa = null
        }, time)
    }
}

AJAX

const ajax = (method, url, data, success, fail) => {
    const request = new XMLHttpRequest() //创建xmh
    request.open(method, url); //open与服务器建立连接
    request.onreadystatechange = function () {
        if(request.readyState === 4) {
            if(request.status >= 200 && request.status < 300 ) {
                success(request)
            }else{
                fail(request)
            }
        }
    };
    request.send(); //send发送请求
}