首页 > 其他分享 >面试-JS基础-异步和单线程

面试-JS基础-异步和单线程

时间:2024-09-11 19:37:57浏览次数:9  
标签:异步 console undefined img 单线程 JS log

  1. 同步和异步的区别是什么?
  2. 手写Promise加载一张图片
  3. 前端用到异步的场景?
  • JS是单线程语言,只能同时做一件事
  • 浏览器和nodejs已支持JS启动线程,比如Web Worker(不知道是啥东西)
  • JS和DOM渲染共用一个线程,因为JS可以修改DOM结构。意味着JS在工作的时候DOM渲染要停止,反之亦然。

异步的出现:遇到等待的时候,网页不能卡住啥也不能干吧。

// 异步
console.log(100)
setTimeout(() => {
  console.log(200)
},1000)
console.log(300)

异步不会阻塞代码的执行,比如上面,100和300会立马出来,一秒之后再来执行回调函数,打印出200。同步会阻塞代码执行。

异步的应用场景

  • 网络请求,如 ajax请求
  • 定时任务,如 setTimeout

callback hell 回调地狱
回调函数(callback)指的是依噶函数作为参数被传递给另一个函数,并在合适的时间点被调用。当回调函数嵌套得过深时,会导致代码结构非常复杂,难以阅读和维护,通常称之为回调地狱。比如:

doSomething(function(result1) {
    doSomethingElse(result1, function(result2) {
        doMoreStuff(result2, function(result3) {
            console.log(result3);
        });
    });
});

为了解决回调地狱,ES6引入了Promise,后续的ES版本中又引入了async/await,这极大地简化了异步代码的写法,使代码更具可读性。

Promise

问题解答

  1. 同步阻塞代码执行,异步不会阻塞
  2. 手写Promise加载一张图片
const url = 'https://image.baidu.com/search/detail?ct=503316480&z=undefined&tn=baiduimagedetail&ipn=d&word=%E9%9C%89%E9%9C%89&step_word=&lid=11582583795945989400&ie=utf-8&in=&cl=2&lm=-1&st=undefined&hd=undefined&latest=undefined&copyright=undefined&cs=579797668,1534392875&os=4235694728,2299234967&simid=579797668,1534392875&pn=3&rn=1&di=7400427937490534401&ln=1819&fr=&fmq=1726053747314_R&fm=&ic=undefined&s=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&is=4235694728,2299234967&istype=0&ist=&jit=&bdtype=0&spn=0&pi=0&gsm=1e&objurl=https%3A%2F%2Fp3-pc-sign.douyinpic.com%2Ftos-cn-i-0813%2FoMAIghGAem2EzAcNWAKCAzx0ZAhzACfPCE6A4o~tplv-dy-aweme-images%3Aq75.webp&rpstart=0&rpnum=0&adpicid=0&nojc=undefined&dyTabStr=MCwzLDEsMiwxMyw3LDYsNSwxMiw5'
function loadImg(src){
  return new Promise(
    (resolve, reject) => {
      const img = document.createElement('img')
      img.onload = () => {
        resolve(img)
      }
      img.onerror = () => {
        reject(new Error('图片加载失败 ${src}'))
      }
      img.src = src
    }
  
  )
}

loadImg(url).then(img => {
  console.log(img.width)
  return img //返回了img对象,下一个.then就函数就会接收到
}).then(img => {
  console.log(img.height)
}).catch(ex => console.log(ex))

两个链接的情况:

标签:异步,console,undefined,img,单线程,JS,log
From: https://www.cnblogs.com/gardenOfCicy/p/18408752

相关文章

  • wx-xcx ad.js
    varinterstitialAd=null;module.exports={ //激励视频广告 showRewardVideoAd(adId,closeEnd,closeNotEnd){ letpages=getCurrentPages() letcurrentPage=pages[pages.length-1] letrewardVideoAd=currentPage[adId] if(!rewardVideoAd){ //初始化......
  • 经典 JS 闭包面试题
    functionfun(n,o){ console.log(o) return{  fun:function(m){   returnfun(m,n);  } };}vara=fun(0);a.fun(1);a.fun(2);a.fun(3);//undefined,?,?,?varb=fun(0).fun(1).fun(2).fun(3);//undefined,?,?,?varc=fun(0).fun(1)......
  • SolidJS-每日小知识(9/11)
    知识介绍对指定SVG元素实现滚轮zoom代码分析1.对指定SVG元素实现滚轮zoom设置viewBox属性{x,y,w,h}以及缩放系数scale为信号量const[scale,setScale]=createSignal(1);//初始缩放比例const[boxLocation,setboxLocation]=createSignal({x:0,y:0});......
  • 鸿蒙里面处理异步函数的方法
    1.使用then()方法是用于处理异步操作成功后的结果,并且可以链式调用以实现多个异步操作的顺序执行.then()处理初始Promise的结果,然后返回一个新的值,这个新值被传递给下一个.then(),以此类推错误处理:如果在.then()中的函数抛出错误,这个错误会被传递给下一个.then()的on......
  • js 快捷删除对象不需要的属性
    js快捷删除对象不需要的属性1.问题示例例如–你想删掉学生对象中的age属性你会如何做?letstudent={ name:'刘大哥', age:'56', like:'看电视',}2.快捷删除age属性的方法(delete)关键字deletestudent.age这样就student的age属性就被删除掉了诸君有用且点赞......
  • 面试-JS基础知识-作用域和闭包、this
    函数作为返回值functioncreate(){consta=100returnfunction(){console.log(a)//a在这里是自由变量,向上寻找}}constfn=create()consta=200fn()//100函数作为参数functionprint(fn){consta=13fn()}consta=100functionfn(......
  • Qt 中实现异步散列器80
    前言在前面两篇实战文章中:OpenTelemetry实战:从零实现分布式链路追踪OpenTelemetry实战:从零实现应用指标监控:西部世界官网覆盖了可观测中的指标追踪和metrics监控,下面理应开始第三部分:日志。但在开始日志之前还是要先将链路追踪和日志结合起来看看应用实际使用的实践。......
  • HTML静态网页作业(HTML+CSS+JS)——蜡笔小新动漫网页设计制作(5个页面)
    ......
  • jsp潮流服饰网店平台f91s7
    jsp潮流服饰网店平台f91s7本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能用户,商品分类,商品信息技术要求:   开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoot,Spring技术......
  • jsp车辆保险系统的设计与实现5f475
    jsp车辆保险系统的设计与实现5f本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能用户,保险信息,保单信息,车辆信息,理赔申请,理赔结果,通知公告技术要求:   开发语言:JSP前端使用:HTML5,CSS,JSP动......