4.异步和单线程

js的三座大山

1.原型和原型链
2.作用域和闭包
3.异步和单线程
+变量的类型和计算+后边的知识

//-------------题目---------------
1.同步和异步的区别是什么?分别举一个同步和异步的例子
    *同步会阻塞代码执行,异步不会;
    *alert是同步,setTimeout是异步;
2.一个关于setTimeout的笔试题
//打印顺序:1--3--5--2--1秒之后4
console.log(1);
setTimeout(function(){
    console.log(2);
},0);
console.log(3);
setTimeout(function(){
    console.log(4);
},1000);
console.log(5);
3.前端使用异步的场景有哪些

3个场景的特点是都需要等待,为什么等待需要异步呢,因为等待的过程中不 能有卡顿,不能阻塞;这一切的方法和设计都是因为js单线程语言决定的,单线程就只允许同时做一件事,如果想同时做多个,那其他的都必须去一边排队去,先做好一件事把剩余的做完了在做其他的,这是一个串行的过程

1.定时任务:setTimeout,setInterval
2.网络请求:ajax请求,动态<img>加载
3.事件绑定

//---------------知识点-----------------

1.什么是异步(对比同步)
  //最大的区别:有没有阻塞后面程序的进行
  //同步:会阻塞代码的执行
  //异步:(我走我的,我走完之后,回来再说)

 /*****何时需要异步(什么情况下需要等待,什么情况需要异步)*******
  *在可能发生等待的情况
 (如果需要等待,不能卡在这,需要等待过程中继续去做该做的事情)
  *等待过程中不能像alert一样阻塞程序进行
  *因此,所有的“等待的情况”都需要异步
2.前端使用异步的场景有哪些
   1.定时任务:setTimeout,setInterval  
   2.网络请求:ajax请求,动态<img>加载

*1、请求一个线上数据需要等待,如果网络情况好的话,几十毫秒、100毫秒就把这个数据拿到了,在计算机中这个一个非常长的时间,这个时间不能卡着,而且你一个页面肯定有很多请求,一请求就卡着,网页就没法看了
*2、如果网络请求不好的话,一个接口的请求可能有几秒钟的时间,几秒钟不能卡着)
*3、如果网页中使用了一google的cdn,结果近几年google在国内不能用了,请求不到我们的页面不能白着,请求这个事情我们最后不做了,后边的该怎么做怎么做,不能因为请求不到就卡着

3.事件绑定

1个点击事件绑上之后,它什么时候点不知道,但是在它点之前下面该干什么干什么,不能因为用户不点这个按钮了,下面的事情就不做了;绑上之后爱点不点,点了之后是点了之后的事情,不点还得往下走。

 eg:1.
  //先打印100--300,一秒之后打印200
  console.log(100);
  //等待一秒之后打印出来200
  setTimeout(function(){
    console.log(200);
  },1000);
  console.log(300);

 eg:2.对比同步
  //打印100之后,弹出框弹出200等待确认,确认之后再打印300
  console.log(100);
  alert(200); //在没有点击确认之前,300不会被打印出来
  console.log(300);

 eg:3.ajax请求代码示例
  //打印顺序start--end--等着这个请求返回之后在执行回调函数打出data1
  console.log('start');
   $.get('./data1.json',function(data1){
        console.log(data1);
   });
  console.log('end');
  
eg:4.<img>加载示例
    //先打印start--end--先定义一个img,img加载完之后打印loaded
    console.log('start');
    var img = document.createElement('img');
    img.onload = function(){
        //这个不会执行,因为它还没回来,只有等到img加载完之后打印
        console.log('loaded');
    };
    img.src = '/xxx.png';
    console.log('end');
    
  eg:5.事件绑定示例
//打印顺序:start--end--用户什么时候触发这个事件什么时候打clicked
    console.log('start');
    document.getElementById('btn1').addEventListener('click',function(){
        console.log('clicked');
    });
    console.log('end');
3.异步和单线程

异步和单线程的关系:
js是个单线程的语言,单线程一次只能干一件事,不能让我干两件,如果想让干多件(同时去干两件事),那就必须有一个到一边排队去,我先干完这个在说,如果没有异步的话,就会出现卡顿的情况;(如果没有异步干完第一件事,在干第二件事,第三件事的时候有可能会出现等待的现象,单线程肯定得等着,等着之后就会出现卡顿,只有异步才能搞定这个问题,想等着就去后边等着,先把接下来的事情搞定之后在去处理等待这个事情)

js之所以是异步,因为它是单线程执行的语言,必须有异步
单线程:一次只能干一件事(一次不能同时干两件事),如果想只能是一个一个排队来,每个函数拿来就坐着,哪行程序拿来就执行哪一行

eg:1.打印顺序:100--300---200
    /*
    *执行第一行打印100;
    *执行setTimeout后,传入setTimeout的函数会被暂存起来,不会立即执行(单线程的特点,不能同时干两件事);
    *执行最后一行,打印300;
    *待所有程序执行完,处于空闲状态时,会立马看有没有暂存起来的要执行;
  *发现暂存起来的setTimeout中的函数无序等待时间,就立即过来行。
    */
    
    console.log(100);
    
    //setTimeout是异步的场景,所有的异步的陈述都会被拿出去暂时不执行
    //setTimeout函数是个异步,把它其中的函数拿出来,放一边等着;
    在往下执行完300,这个时候确定程序都已经执行完之后,在把之前那个函数拿过来看看;确认它是不是可以立即执行,因为这个setTimeout这个后边没有加等待时间,它可以立即执行,那200执行
    
    setTimeout(function(){
        console.log(200);
    });
    console.log(300);

eg:2.setTimeout有延迟时间
    //打印顺序:100--setTimeout里面函数先暂存起来--300--一秒钟之后执 行setTimeout打印200
    console.log(100);
    setTimeout(function(){
        console.log(200);
    },1000);
    console.log(300);
    
eg:3.ajax 
    //打印:start--发送请求之后等待,里面函数暂存起来--end--发送请求
    回来之后执行打印data
    console.log('start');
    $.get('./data1.json',function(data){
        console.log(data);
    });
    console.log('end');
    
eg:4.事件
    //打印:start--绑定事件的回调函数暂存起来--end--点击的时候才能解封执行clicked
    console.log('start');
    document.getElementById('btn1').addEventListener('click',function(){
        alert('clicked');
        
    });
    console.log('end');
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容