weixin

简单理解JavaScript的异步、回调是什么意思

日期: March 4, 2019 作者:网站维护

用JS写一个3秒钟后控制台输出1,然后再过三秒控制台再输出2的程序

用到window的对象的setTimeout这个函数,setTimeout(function, delay),有两个参数,第一个作为参数是一个函数,被称为回调函数。

asyn.gif

如果这么写就不对了:

setTimeout(function(){console.log('1')}, 3000)
setTimeout(function(){consoel.log('2')}, 3000)

setTimeout是异步的,setTimeout的回调的函数“注册”之后马上执行下一步setTimeout语句了。就好像告诉秘书让秘书来等3秒执行回调函数,而他自己不再等马上执行下一条语句了。

显然需要这么写,

setTimeout(function(){
    console.log('1');
    //回调函数里再加一个setTimeout
    setTimeout(function(){
        console.log('2');
    }, 3000)
},3000)

可以看到回调里加了回调,想想看,如果要写很多个隔三秒种,要写多少层。大家称这种写法为回调地狱(hells)

不如这样写:

var a = function(){
    console.log('1');
    setTimeout(b, 3000);
};

var b = function(){console.log('2')};

setTimeout(a,3000)

广告内容为平台自动生成