Web APIs JavaScript执行机制与异步编程模型

这篇具有很好参考价值的文章主要介绍了Web APIs JavaScript执行机制与异步编程模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

js执行机制

js是单线程,同一个时间只能做一件事情,所有任务需要排队所以有时候会渲染不连贯

  • 同步任务

都在主线程上执行,形成一个执行栈

  • 异步任务

js的异步是通过回调函数实现的分为三类:1.普通事件:click等,2.资源加载:load,error,3.定时器

异步任务添加到任务队列

先执行执行栈的同步任务,异步任务放入任务队列中,一旦执行栈中所有的同步任务执行完毕,系统就会执行异步任务。异步任务进程提交给浏览器处理JavaScript,JavaScript执行机制,异步编程
由于主线程不断的重复获取任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环(event loop)

window对象

BOM 是浏览器对象模型
JavaScript,JavaScript执行机制,异步编程

  • window对象是一个全局对象,也可以说是JavaScript中的顶级对象

  • 像document、alert()、console.log()这些都是window的属性,基本BOM的属性和方法都是window的

  • 所有通过var定义在全局作用域中的变量、函数都会变成window对象的属性和方法

  • window对象下的属性和方法调用的时候可以省略window

location对象

location (地址) 它拆分并保存了 URL 地址的各个组成部分, 它是一个对象

属性/方法说明
href属性,获取完整的 URL 地址,赋值时用于地址的跳转
search属性,获取地址中携带的参数,符号 ?后面部分
hash属性,获取地址中的啥希值,符号 # 后面部分
reload()方法,用来刷新当前页面,传入参数 true 时表示强制刷新
<body>
  <form>
    <input type="text" name="search"> <button>搜索</button>
  </form>
  <a href="#/music">音乐</a>
  <a href="#/download">下载</a>
  <button class="reload">刷新页面</button>
  <script>
    // location 对象  
    // 1. href属性 (重点) 得到完整地址,赋值则是跳转到新地址
    console.log(location.href)
    // location.href = 'http://www.itcast.cn'

    // 2. search属性  得到 ? 后面的地址 
    console.log(location.search)  // ?search=笔记本

    // 3. hash属性  得到 # 后面的地址
    console.log(location.hash)

    // 4. reload 方法  刷新页面
    const btn = document.querySelector('.reload')
    btn.addEventListener('click', function () {
      // location.reload() // 页面刷新
      location.reload(true) // 强制页面刷新 ctrl+f5
    })
  </script></body>


navigator对象

navigator是对象,该对象下记录了浏览器自身的相关信息

  • 使用 userAgent 检测浏览器的版本及平台

// 检测 userAgent(浏览器信息)(function () {
  const userAgent = navigator.userAgent  // 验证是否为Android或iPhone
  const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
  const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
  // 如果是Android或iPhone,则跳转至移动站点
  if (android || iphone) {
    location.href = 'http://m.itcast.cn'
  }})();


histroy对象

history 是对象,主要管理历史记录, 该对象与浏览器地址栏的操作相对应,如前进、后退等

<body>
  <button class="back">←后退</button>
  <button class="forward">前进→</button>
  <script>
    // histroy对象

    // 1.前进
    const forward = document.querySelector('.forward')
    forward.addEventListener('click', function () {
      // history.forward() 
      history.go(1)
    })
    // 2.后退
    const back = document.querySelector('.back')
    back.addEventListener('click', function () {
      // history.back()
      history.go(-1)
    })
  </script></body>


本地存储localStorage

本地存储:将数据存储在本地浏览器中

好处:

1、页面刷新或者关闭不丢失数据,实现数据持久化

2、容量较大,sessionStorage和 localStorage 约 5M 左右

localStorage

作用: 数据可以长期保留在本地浏览器中,刷新页面和关闭页面,数据也不会丢失

**特性:**以键值对的形式存储,并且存储的是字符串, 省略了window 无法直接存取对象

<body>
  <script>
    // 本地存储 - localstorage 存储的是字符串 
    // 1. 存储/修改  localStorage.setItem(key, value)
    localStorage.setItem('age', 18)

    // 2. 获取 localStorage.getItem(key)
    console.log (localStorage.getItem('age'))

    // 3. 删除  localStorage.removeItem(key)
    localStorage.removeItem('age')
  </script>


sessionStorage

特性:

  • 用法跟localStorage基本相同

  • 区别是:当页面浏览器被关闭时,存储在 sessionStorage 的数据会被清除

存储:sessionStorage.setItem(key,value)

获取:sessionStorage.getItem(key)

删除:sessionStorage.removeItem(key)

localStorage 存储复杂数据类型

**问题:**因为本地存储里面取出来的是字符串,不是对象,无法直接使用

**解决: **把取出来的字符串转换为对象

**语法:**JSON.parse(JSON字符串)

<body>
  <script>
    // 本地存储复杂数据类型
    const goods = {
      name: '小米',
      price: 1999
    }
    // 1. 把对象转换为JSON字符串  JSON.stringify
    localStorage.setItem('goods', JSON.stringify(goods))
    // 2. 把JSON字符串转换为对象  JSON.parse
    console.log(JSON.parse(localStorage.getItem('goods')))
  </script></body>


数组map方法

使用场景:

map 可以遍历数组处理数据,并且返回新的数组

语法:文章来源地址https://www.toymoban.com/news/detail-834066.html

<body>
  <script>
  const arr = ['red', 'blue', 'pink']
  // 1. 数组 map方法 处理数据并且 返回一个数组
   const newArr = arr.map(function (ele, index) {
    // console.log(ele)  // 数组元素
    // console.log(index) // 索引号
    return ele + '颜色'
	})console.log(newArr)</script></body>


map 也称为映射。映射是个术语,指两个元素的集之间元素相互“对应”的关系。

map重点在于有返回值,forEach没有返回值(undefined)

数组join方法

**作用:**join() 方法用于把数组中的所有元素转换一个字符串

语法:

<body>
  <script>
    const arr = ['red', 'blue', 'pink']

    // 1. 数组 map方法 处理数据并且 返回一个数组
    const newArr = arr.map(function (ele, index) {
      // console.log(ele)  // 数组元素
      // console.log(index) // 索引号
      return ele + '颜色'
    })
    console.log(newArr)

    // 2. 数组join方法  把数组转换为字符串
    // 小括号为空则逗号分割
    console.log(newArr.join())  // red颜色,blue颜色,pink颜色
    // 小括号是空字符串,则元素之间没有分隔符
    console.log(newArr.join(''))  //red颜色blue颜色pink颜色
    console.log(newArr.join('|'))  //red颜色|blue颜色|pink颜色
  </script></body>

到了这里,关于Web APIs JavaScript执行机制与异步编程模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java高级应用:深入探索Java编程的强大功能,JVM 类加载机制, JVM 内存模型,垃圾回收机制,JVM 字节码执行,异常处理机制】

    本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题 中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:

    2024年01月16日
    浏览(91)
  • JS执行机制--同步与异步

    单线程 JavaScript语言具有单线程的特点,同一个时间只能做一件事情。这是因为JavaScript脚本语言是为了处理页面中用户的交互,以及操作DOM而诞生的。如果对某个DOM元素进行添加和删除,不同同时进行。应该是先添加,再删除,事件有序。 单线程的特点是所有任务都需要排队

    2023年04月20日
    浏览(34)
  • 解密JavaScript的异步机制:打破单线程限制,提升性能与用户体验

     🎬 江城开朗的豌豆 :个人主页  🔥 个人专栏  :《 VUE 》 《 javaScript 》  📝  个人网站  :《 江城开朗的豌豆🫛 》  ⛺️ 生活的理想,就是为了理想的生活 !   目录 一、JavaScript的异步编步机制 二、事件循环(Event Loop)和任务队列(Task Queue) 三、宏任务和微任务

    2024年02月08日
    浏览(40)
  • JavaScript 异步编程解决方案-上篇

    1、JavaScript 异步编程 1、传统的方案 :JavaScript 中的异步操作函数往往通过回调函数来实现异步任务的结果处理 场景:fs 文件操作 数据库操作 AJAX 定时器 eg: 1、setTimeout 函数

    2024年02月01日
    浏览(42)
  • JavaScript 异步编程解决方案-中篇

    1.Promise 构造函数:new Promise(executor) Promise() 只能通过 new 运算符来构造。如果尝试在没有使用 new 的情况下调用它,会抛出 TypeError 异常。 1.executor 执行器函数:(resolve,reject)={} 2.resolve 函数:内部定义成功时候调用values={} 3.reject 函数:内部定义失败时候调用error={} 备注:e

    2024年01月23日
    浏览(46)
  • [javascript核心-04]彻底弄懂Promise异步编程

    本文github地址:JavaScript_Interview_Everything 大前端知识体系与面试宝典,从前端到后端,全栈工程师,成为六边形战士 1.1. 快速上手 01快手上手.js 02.若传入的是另一个promise对象,则状态由传入的promise对象决定 03.若传入了一个实现了 then 方法的对象,则执行该then方法且由此方法

    2024年02月08日
    浏览(41)
  • defer 和 async:JavaScript异步编程的利器

    🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_ CSDN 博客专家、23年度博客之星前端领域TOP1 🕠 牛客 高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课 签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你

    2024年03月24日
    浏览(56)
  • 模拟实现.net中的Task机制:探索异步编程的奥秘

    .net中使用Task可以方便地编写异步程序,为了更好地理解Task及其调度机制,接下来模拟Task的实现,目的是搞清楚: Task是什么 Task是如何被调度的 从最基本的Task用法开始 这个命令的作用是将action作为一项任务提交给调度器,调度器会安排空闲线程来处理。 我们使用Job来模拟

    2024年02月06日
    浏览(38)
  • javascript二维数组(21)执行异步HTTP(Ajax)请求的方法($.get、$.post、$getJSON、$ajax)

    . g e t 、 .get、 . g e t 、 .post、 g e t J S O N 、 getJSON、 g e t J SON 、 ajax都是jQuery提供的用于执行异步HTTP(Ajax)请求的方法。每个方法都有其特定的用途和区别。 . g e t :这个方法使用 G E T 方式来进行异步请求。其语法结构为: .get:这个方法使用GET方式来进行异步请求。其语

    2024年02月07日
    浏览(53)
  • Python异步编程高并发执行爬虫采集,用回调函数解析响应

    异步技术是Python编程中对提升性能非常重要的一项技术。在实际应用,经常面临对外发送网络请求,调用外部接口,或者不断更新数据库或文件等操作。 这这些操作,通常90%以上时间是在等待,如通过REST, gRPC向服务器发送请求,通常可能等待几十毫秒至几秒,甚至更长。如

    2024年02月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包