菜鸟进化笔记--回调就是异步?

一直以来我js看到回调函数,就果断认为它是异步的,
然后今天装x让打脸了。咳咳!
## 什么是同步?什么是异步?
官方说法:
(1) 同步函数:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数所要做的事情全都做完了才返回。

(2) 异步函数:如果一个异步函数被调用时,该函数会立即返回尽管该函数规定的操作任务还没有完成。
深讲的话要扯到线程的问题,这里就不深入研究了
举个栗子;

var a =1;
var b = 2;//这就是同步

因为看到一个就马上执行了。也就是一个一个上。

function a(){
}
a();

还是同步;

function a(b){
b()
console.log(1)
}
function b(){
}
a();

一样是同步;代码除了异步都是同步。在我看来没有放入
Event queue(事件队列),也就是没有调用其他线程的都是同步;

for () {
    setTimeout(function a() {
        console.log(2);
    }, 0);
}
  console.log(1);//打印结果为1,2

现在这里的a是异步的了;
为什么?因为setTimeout()调用了其他线程。
接下来看个简单的题;

for (var i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, 0);
}
 
console.log(i);

输出什么?答案 :5 5 5 5 5 5;

再看这个

setTimeout(function func1() {
            console.log(1)
            a();
        }, 0)

        function a() {
            setTimeout(function func2() {
                console.log(2)
            }, 0)
            console.log(3)
        }

        a();

        console.log(4)

答案我就不说了,
看到这你应该知道,这东西不简单了。涉及
‘栈:函数执行都会生成执行上下文’
‘进程线程’,Event queue(事件队列)等,
总结都是‘浏览器的事件循环’ 的内容。
只有在异步函数里的回调函数才是异步
回调 != 异步。
然后我能力有限,自己好不容易才搞懂,写了一会,
发现有些东西不知道怎么说,而且又懒的画图。
所有就当回答一个问题

发布了6 篇原创文章 · 获赞 111 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44210563/article/details/103707382
今日推荐