js四种异步方法(回调函数、Promise、Generator、async/await)

1,回调函数
函数B作为函数A的入参,且函数A执行了函数B,此时我们把函数A叫做回调函数。
function A(callback){
    console.log("A");
    callback("param B");//函数A执行了函数"B",给函数"B"入参"param B"
}
A((val) => { //函数"B"作为函数A的入参,"B"有一个入参val
    console.log(val);//输出"param B"
})
$(dom).click(function() {
    console.log("我是回调函数");
})

2,闭包

在函数A内部定义一个函数B,函数B访问了函数A的变量,对于A来说,B形成了闭包。
闭包:一个访问了父级及以上的作用域变量的函数。闭包实现了变量私有化和访问私有变量。
function A(){
    let a = 1;
    return function () {
        console.log(a + 1);
    }
}
let a = A(); //a是一个闭包
a(); //输出2

 

函数自身调用,也可以写成:

let a = (function (){
    let a = 1;
    return function () {
        console.log(a + 1);
    }
})();
a(); //输出2

 

被闭包访问的作用域变量会一直存在于内存中,不会被JS的垃圾回收机制回收,造成内存泄漏。

闭包不是回调,回调也不是闭包,回调是函数内执行另一个函数,闭包是函数内返回另一个函数,且返回了父级函数的作用域变量

function A(){
    let a = '这是'
    return () => {
        console.log(a += '闭包');
    }
}
let a = A();
a();
a();

  输出:

 

 

function A(callback){
    let a = '这是'
    callback(a += '回调');
}
A((val) => {
    console.log(val);
})
A((val) => {
    console.log(val);
})

  输出:

 

 

posted on 2022-09-07 16:59  Zoie_ting  阅读(161)  评论(0编辑  收藏  举报