微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

es6学习笔记之Async函数基本教程

本文介绍的是关于es6中Async函数的相关内容,非常出来供大家参考学习,需要的朋友们下面来看看详细的介绍:

async 函数

async 函数,使得异步操作变得更加方便。它是 Generator 函数的语法糖。

Generator 函数,依次读取两个文件:

rush:js;"> var fs = require('fs'); var readFile = function (fileName) { return new Promise(function (resolve,reject) { fs.readFile(fileName,function(error,data) { if (error) reject(error); resolve(data); }); }); }; var gen = function* () { var f1 = yield readFile('/etc/fstab'); var f2 = yield readFile('/etc/shells'); console.log(f1.toString()); console.log(f2.toString()); };

写成async函数,就是下面这样:

rush:js;"> var asyncReadFile = async function () { var f1 = await readFile('/etc/fstab'); var f2 = await readFile('/etc/shells'); console.log(f1.toString()); console.log(f2.toString()); };

async函数对 Generator 函数的改进,体现在以下四点:

1)内置执行器

Generator 函数的执行必须靠执行器,所以才有了co模块,而async函数自带执行器。也就是说,async函数的执行,与普通函数一模一样,只要一行。

rush:js;"> var result = asyncReadFile();

上面的代码调用了asyncReadFile函数,然后它就会自动执行,输出最后结果。这完全不像 Generator 函数,需要调用next方法,或者用co模块,才能真正执行,得到最后结果。

2)更好的语义

async和await,比起星号和yield,语义更清楚了。async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。

3)更广的适用性

co模块约定,yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的await命令后面,可以是Promise 对象和原始类型的值(数值、字符串和布尔值,但这时等同于同步操作)。

4)返回值是 Promise

async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用then方法指定下一步的操作。

进一步说,async函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而await命令就是内部then命令的语法糖。

一、基本用法

async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

{ setTimeout(resolve,ms); }); } async function asyncPrint(value,ms) { await timeout(ms); console.log(value); } asyncPrint('hello world',5000);

上面代码指定5000毫秒以后,输出hello world。

由于async函数返回的是 Promise 对象,可以作为await命令的参数。所以,上面的例子也可以写成下面的形式:

{ setTimeout(resolve,5000);

async 函数多种使用形式

{};

二、语法

async函数的语法规则总体上比较简单,难点是错误处理机制。

返回 Promise 对象

async函数返回一个 Promise 对象。async函数内部return语句返回的值,会成为then方法回调函数的参数。

console.log(v)) // "hello world"

Promise 对象的状态变化

async函数返回的 Promise 对象,必须等到内部所有await命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到return语句或者抛出错误。也就是说,只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数

rush:js;"> async function getTitle(url) { let response = await fetch(url); let html = await response.text(); return html.match(/([\s\S]+)<\/title>/i)[1]; } getTitle('https://<a href="https://www.jb51.cc/tag/tc39/" target="_blank" class="keywords">tc39</a>.github.io/ecma262/').then(console.log) // "ECMAScript 2017 Language Specification"</pre> </div> <p>上面<a href="https://www.jb51.cc/tag/daima/" target="_blank" class="keywords">代码</a>中,<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a>getTitle内部有三个操作:抓取网页、取出文本、匹配<a href="https://www.jb51.cc/tag/yemian/" target="_blank" class="keywords">页面</a><a href="https://www.jb51.cc/tag/biaoti/" target="_blank" class="keywords">标题</a>。只有这三个操作全部完成,才会执行then<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>里面的console.log。</p> <p><h3>三、使用注意点</h3></p> <p>await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try…catch<a href="https://www.jb51.cc/tag/daima/" target="_blank" class="keywords">代码</a>块中。</p> <div class="jb51code"> <pre class="b<a href="https://www.jb51.cc/tag/rush/" target="_blank" class="keywords">rush</a>:js;"> async function myFunction() { try { await somethingThatReturnsAPromise(); } catch (err) { console.log(err); } } // 另一种写法 async function myFunction() { await somethingThatReturnsAPromise() .catch(function (err) { console.log(err); }; }</pre> </div> <p>多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。</p> <div class="jb51code"> <pre class="b<a href="https://www.jb51.cc/tag/rush/" target="_blank" class="keywords">rush</a>:js;"> //异步操作(即互不依赖),被写成继发关系。这样比较耗时,因为只有getFoo完成以后,才会执行getBar,完全可以让它们同时触发。 let foo = await getFoo(); let bar = await getBar(); // 写法一 let [foo,bar] = await Promise.all([getFoo(),getBar()]); // 写法二 let fooPromise = getFoo(); let barPromise = getBar(); let foo = await fooPromise; let bar = await barPromise;</pre> </div> <p>await命令只能用在async<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a>之中,如果用在普通<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a>,就会报错。</p> <p>更多关于async<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a>的使用例子可以点击查看这篇<a href="https://www.jb51.cc/tag/wenzhang/" target="_blank" class="keywords">文章</a>:<a href="//www.jb51.cc/article/113475.htm">//www.jb51.cc/article/113475.htm</a></p> <p><h3>总结</h3></p> <p>以上就是这篇<a href="https://www.jb51.cc/tag/wenzhang/" target="_blank" class="keywords">文章</a>的全部<a href="https://www.jb51.cc/tag/neirong/" target="_blank" class="keywords">内容</a>了,希望本文的<a href="https://www.jb51.cc/tag/neirong/" target="_blank" class="keywords">内容</a>对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程之家的<a href="https://www.jb51.cc/tag/zhichi/" target="_blank" class="keywords">支持</a>。</p><ins class="adsbygoogle" style="display:inline-block;width:780px;height:90px" data-ad-client="ca-pub-4605373693034661" data-ad-slot="4286417769"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><p class="small text-muted">版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。</p> </div><div class="topcard-tags"><a href="https://www.jb51.cc/tag/async/" class="tag_link" target="_blank">async</a><a href="https://www.jb51.cc/tag/asyncp/" class="tag_link" target="_blank">async</a><a href="https://www.jb51.cc/tag/asynchanshu/" class="tag_link" target="_blank">async函数</a><a href="https://www.jb51.cc/tag/class/" class="tag_link" target="_blank">class</a><a href="https://www.jb51.cc/tag/classp/" class="tag_link" target="_blank">class</a><a href="https://www.jb51.cc/tag/pclass/" class="tag_link" target="_blank">class</a></div><ul class="list-group"> <li class="list-group-item"><a href="https://www.jb51.cc/js/39366.html" title="canvas实现弧形可拖动进度条效果">上一篇:canvas实现弧形可拖动进度条效果</a><a href="https://www.jb51.cc/js/39362.html" title="Angularjs 与 bower安装和使用详解" class="text-muted pull-right">下一篇:Angularjs 与 bower安装和使用详解</a> </li> </ul> </div> </div> </div> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <h4>相关推荐</h4> <hr /> <div class="list_con"> <a href="https://www.jb51.cc/js/4742335.html" title="自定义web弹窗/层:简易风格的msg与可拖放的dialog,生成博客园文章目录弹窗"><img class="lazy" src="https://www.jb51.cc/images/np.jpg" data-original="https://www.jb51.cc/res/2024/09-25/18/879e7ec08a36083a57dfc8b44214469d.gif" title="" width="160" height="90" style="float:right;margin-left:30px;" /><div class="title">自定义web弹窗/层:简易风格的msg与可拖放的dialog,生成博客园文章目录弹窗</div> <div class="summary">前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为layUI的一个重要组件,使用简单、接口参数丰富,功能健壮,深受广大开发者的喜爱,作为一个热(经)爱(常)工(划)作(水),喜欢钻研探索技术的程序员(狗),我们自己来实现一个web弹窗/层,一窥layer的本源(/手动滑稽脸),进步,从</div> <time class="summary">作者:huanzi-qch 时间:2024-09-25</time> </a> </div><div class="list_con"> <a href="https://www.jb51.cc/js/4742334.html" title="nice-validator表单验证插件的简单使用"><img class="lazy" src="https://www.jb51.cc/images/np.jpg" data-original="https://www.jb51.cc/res/2024/09-25/18/84bd76d88488cafdfb2789b5a991fecf.png" title="" width="160" height="90" style="float:right;margin-left:30px;" /><div class="title">nice-validator表单验证插件的简单使用</div> <div class="summary">前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步,是数据安全的第一道关卡,虽然我们不能100%相信客户端提交的数据(真正的校验还得在服务端进行),但设置前端表单校验也是至关重要的,自己写逻辑代码一个一个表单字段去校验不现实,又不想自己造轮子,使用jquery插件是不错的选择,这里记录一下在</div> <time class="summary">作者:huanzi-qch 时间:2024-09-25</time> </a> </div><div class="list_con"> <a href="https://www.jb51.cc/js/4742333.html" title="基于“formData批量上传的多种实现” 的多图片预览、上传的多种实现"><img class="lazy" src="https://www.jb51.cc/images/np.jpg" data-original="https://www.jb51.cc/res/2024/09-25/18/cf659cff914621d918c6072273c30973.gif" title="" width="160" height="90" style="float:right;margin-left:30px;" /><div class="title">基于“formData批量上传的多种实现” 的多图片预览、上传的多种实现</div> <div class="summary">前言 图片上传是web项目常见的需求,我基于之前的博客的代码(请戳:formData批量上传的多种实现)里的第三种方法实现多图片的预览、上传,并且支持三种方式添加图片到上传列表:选择图片、复制粘贴图片、鼠标拖拽图片,同时支持从上传列表中移除图片(点击“X”号) 效果演示 选择图片 页面操作 后台接参</div> <time class="summary">作者:huanzi-qch 时间:2024-09-25</time> </a> </div><div class="list_con"> <a href="https://www.jb51.cc/js/4742332.html" title="踹掉后端,前端导出Excel!"><img class="lazy" src="https://www.jb51.cc/images/np.jpg" data-original="https://www.jb51.cc/res/2024/09-25/18/02f80db4fdf55f3a24674e2854e018f2.png" title="" width="160" height="90" style="float:right;margin-left:30px;" /><div class="title">踹掉后端,前端导出Excel!</div> <div class="summary">前言 导出Excel文件这个功能,通常都是在后端实现返回前端一个下载链接,但有时候我们只想导出前端页面上已经有了的数据,不想再调后端导出接口浪费服务器资源,学习本文demo例子,我们踹掉后端,直接在前端导出Excel! 代码实现 1、利用Blob对象构造一个a标签的href链接,从而实现文件下载,E</div> <time class="summary">作者:huanzi-qch 时间:2024-09-25</time> </a> </div><div class="list_con"> <a href="https://www.jb51.cc/js/4742331.html" title="Web Worker——js的多线程,实现统计博客园总阅读量、总评论量、总推荐量"><img class="lazy" src="https://www.jb51.cc/images/np.jpg" data-original="https://www.jb51.cc/res/2024/09-25/18/db8dce1453ed09a8230451f2a9fcdc68.png" title="" width="160" height="90" style="float:right;margin-left:30px;" /><div class="title">Web Worker——js的多线程,实现统计博客园总阅读量、总评论量、总推荐量</div> <div class="summary">前言 众所周知,js是单线程的,从上往下,从左往右依次执行,当我们有耗时的任务需要处理时,便会阻塞线程造成页面卡顿等问题。web worker的目的,就是为JavaScript创造多线程环境,允许主线程将一些任务分配给子线程。在主线程运行的同时,子线程在后台运行,两者互不干扰。等到子线程完成计算任务</div> <time class="summary">作者:huanzi-qch 时间:2024-09-25</time> </a> </div><div class="list_con"> <a href="https://www.jb51.cc/js/4742330.html" title="select标签 禁止选择但又能通过序列化form表单传值到后台"><img class="lazy" src="https://www.jb51.cc/images/np.jpg" data-original="https://www.jb51.cc/res/2024/09-25/18/1cd1c972ce822d1a99b7d1b2c8f9cfcd.png" title="" width="160" height="90" style="float:right;margin-left:30px;" /><div class="title">select标签 禁止选择但又能通过序列化form表单传值到后台</div> <div class="summary">前言 项目开发中,我们可能会碰到这样的需求:select标签,禁止选择但又能通过序列化form表单传值到后台,但是当我们使用disabled=&quot;disabled&quot;时发现,无法序列化form获取到select标签的值;当我们使用readonly=&quot;readonly&quo</div> <time class="summary">作者:huanzi-qch 时间:2024-09-25</time> </a> </div><div class="list_con"> <a href="https://www.jb51.cc/js/4742329.html" title="还在问跨域?本文记录js跨域的多种实现实例"><img class="lazy" src="https://www.jb51.cc/images/np.jpg" data-original="https://www.jb51.cc/res/2024/09-25/18/b3d33681769f85a34baa6f533017a87e.png" title="" width="160" height="90" style="float:right;margin-left:30px;" /><div class="title">还在问跨域?本文记录js跨域的多种实现实例</div> <div class="summary">前言 众所周知,受浏览器同源策略的影响,产生了跨域问题,那么我们应该如何实现跨域呢?本文记录几种跨域的简单实现 前期准备 为了方便测试,我们启动两个服务,10086(就是在这篇博客自动生成的项目,请戳:SpringBoot系列——Spring-Data-JPA(究极进化版) 自动生成单表基础增、删、</div> <time class="summary">作者:huanzi-qch 时间:2024-09-25</time> </a> </div><div class="list_con"> <a href="https://www.jb51.cc/js/4742328.html" title="formData批量上传的多种实现"><img class="lazy" src="https://www.jb51.cc/images/np.jpg" data-original="https://www.jb51.cc/res/2024/09-25/18/f653266552cf5647e3a76ba22e73dece.png" title="" width="160" height="90" style="float:right;margin-left:30px;" /><div class="title">formData批量上传的多种实现</div> <div class="summary">前言 最近项目需要批量上传附件,查了下资料,网上很多但看着一脸懵,只贴部分代码,介绍也不详细,这里记录一下自己的采坑与多种实现,以免以后忘记。 这里先介绍下FormData对象,以下内容摘自:https://developer.mozilla.org/zh-CN/docs/Web/API/FormD</div> <time class="summary">作者:huanzi-qch 时间:2024-09-25</time> </a> </div><div class="list_con"> <a href="https://www.jb51.cc/js/4742327.html" title="laypage 物理分页与逻辑分页实例"><img class="lazy" src="https://www.jb51.cc/images/np.jpg" data-original="https://www.jb51.cc/res/2024/09-25/18/132e831d786a4bdd438d96a8d4cc755e.png" title="" width="160" height="90" style="float:right;margin-left:30px;" /><div class="title">laypage 物理分页与逻辑分页实例</div> <div class="summary">前言 以下介绍摘自&#160;layui官网laypage layPage 致力于提供极致的分页逻辑,既可轻松胜任异步分页,也可作为页面刷新式分页。自 layui 2.0 开始,无论是从核心代码还是API设计,layPage 都完成了一次蜕变。清爽的UI、灵活的排版,极简的调用方式,这一切的优质元素</div> <time class="summary">作者:huanzi-qch 时间:2024-09-25</time> </a> </div><div class="list_con"> <a href="https://www.jb51.cc/js/4742326.html" title="乐观锁机制解决多层嵌套异步ajax问题"><div class="title">乐观锁机制解决多层嵌套异步ajax问题</div> <div class="summary">前言 在项目中我们通常需要使用ajax异步嵌套去请求数据并做数据的展示,当我们多次快速的多次的发起ajax,因为ajax是异步的,每个ajax触发回调的时间都是不可控的,这样就会造成前面发起的ajax跟后面发起的ajax都有可能去修改同一个DOM,导致展示的数据顺序错乱或数据重复,我们希望DOM展示</div> <time class="summary">作者:huanzi-qch 时间:2024-09-25</time> </a> </div></div> </div> </div> </div> <div class="col-sm-12 col-md-12 col-lg-3"> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <!-- jb51-article-300x600 --> <ins class="adsbygoogle" style="display:inline-block;width:300px;height:600px" data-ad-client="ca-pub-4605373693034661" data-ad-slot="7541177540"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card" style="padding:20px;"> <label class="main-content-label ">小编推荐</label><div class="entry-img"><img src="https://www.jb51.cc/res/2023/06-29/12/fa513c17761076a6649593e2bd17f268.jpg" height="150" width="100%"><div class="entry-wrap"><a href="https://www.jb51.cc/mp/4606010.html" title="苹果市值2025年有望达4万亿美元" >苹果市值2025年有望达4万亿美元</a> </div></div><ul class="n-list"><li><a href="https://www.jb51.cc/mp/4742234.html" title="微信青少年模式全新升级:视频号内容分级与家长控制功能上线!" >• 微信青少年模式全新升级:视频号内容分</a></li><li><a href="https://www.jb51.cc/mp/4742229.html" title="《地下城与勇士DNF》永久交通卡卡面上线华为钱包!" >• 《地下城与勇士DNF》永久交通卡卡面上线</a></li><li><a href="https://www.jb51.cc/mp/4742227.html" title="优酷为方便长辈看视频,上线银发剧场!" >• 优酷为方便长辈看视频,上线银发剧场!</a></li><li><a href="https://www.jb51.cc/mp/4742224.html" title="微信读书集成腾讯混元AI技术,可以一日阅读千页?" >• 微信读书集成腾讯混元AI技术,可以一日</a></li><li><a href="https://www.jb51.cc/mp/4742221.html" title="京东快递上线11项会员权益" >• 京东快递上线11项会员权益</a></li><li><a href="https://www.jb51.cc/mp/4742219.html" title="高德地图功能升级,新增安全预警" >• 高德地图功能升级,新增安全预警</a></li><li><a href="https://www.jb51.cc/mp/4742214.html" title="小爱同学多模态能力升级,引领智能生活新潮流" >• 小爱同学多模态能力升级,引领智能生活</a></li></ul> </div> </div> </div> <!-- row end --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <label class="main-content-label ">热门标签<a href="https://www.jb51.cc/all" class="pull-right">更多</a> </label> <div class="topcard-tags"><a href="https://www.jb51.cc/tag/python/" title="python">python</a><a href="https://www.jb51.cc/tag/JavaScript/" title="JavaScript">JavaScript</a><a href="https://www.jb51.cc/tag/java/" title="java">java</a><a href="https://www.jb51.cc/tag/HTML/" title="HTML">HTML</a><a href="https://www.jb51.cc/tag/PHP/" title="PHP">PHP</a><a href="https://www.jb51.cc/tag/reactjs/" title="reactjs">reactjs</a><a href="https://www.jb51.cc/tag/C/" title="C#">C#</a><a href="https://www.jb51.cc/tag/Android/" title="Android">Android</a><a href="https://www.jb51.cc/tag/CSS/" title="CSS">CSS</a><a href="https://www.jb51.cc/tag/Nodejs/" title="Node.js">Node.js</a><a href="https://www.jb51.cc/tag/sql/" title="sql">sql</a><a href="https://www.jb51.cc/tag/rp/" title="r">r</a><a href="https://www.jb51.cc/tag/python3x/" title="python-3.x">python-3.x</a><a href="https://www.jb51.cc/tag/MysqL/" title="MysqL">MysqL</a><a href="https://www.jb51.cc/tag/jQuery/" title="jQuery">jQuery</a><a href="https://www.jb51.cc/tag/c4343/" title="c++">c++</a><a href="https://www.jb51.cc/tag/pandas/" title="pandas">pandas</a><a href="https://www.jb51.cc/tag/flutter/" title="Flutter">Flutter</a><a href="https://www.jb51.cc/tag/angular/" title="angular">angular</a><a href="https://www.jb51.cc/tag/IOS/" title="IOS">IOS</a><a href="https://www.jb51.cc/tag/django/" title="django">django</a><a href="https://www.jb51.cc/tag/linux/" title="linux">linux</a><a href="https://www.jb51.cc/tag/swift/" title="swift">swift</a><a href="https://www.jb51.cc/tag/typescript/" title="typescript">typescript</a><a href="https://www.jb51.cc/tag/luyouqi/" title="路由器">路由器</a><a href="https://www.jb51.cc/tag/JSON/" title="JSON">JSON</a><a href="https://www.jb51.cc/tag/luyouqishezhi/" title="路由器设置">路由器设置</a><a href="https://www.jb51.cc/tag/wuxianluyouqi/" title="无线路由器">无线路由器</a><a href="https://www.jb51.cc/tag/h3c/" title="h3c">h3c</a><a href="https://www.jb51.cc/tag/huasan/" title="华三">华三</a><a href="https://www.jb51.cc/tag/huasanluyouqishezhi/" title="华三路由器设置">华三路由器设置</a><a href="https://www.jb51.cc/tag/huasanluyouqi/" title="华三路由器">华三路由器</a><a href="https://www.jb51.cc/tag/diannaoruanjianjiaocheng/" title="电脑软件教程">电脑软件教程</a><a href="https://www.jb51.cc/tag/arrays/" title="arrays">arrays</a><a href="https://www.jb51.cc/tag/docker/" title="docker">docker</a><a href="https://www.jb51.cc/tag/ruanjiantuwenjiaocheng/" title="软件图文教程">软件图文教程</a><a href="https://www.jb51.cc/tag/C/" title="C">C</a><a href="https://www.jb51.cc/tag/vuejs/" title="vue.js">vue.js</a><a href="https://www.jb51.cc/tag/laravel/" title="laravel">laravel</a><a href="https://www.jb51.cc/tag/springboot/" title="spring-boot">spring-boot</a></div> </div> </div> </div> </div> </div> </div> <footer id="footer"> <div class="container" style="width:1440px;"> <div class="row hidden-xs"> <div class="col-sm-12 col-md-9 col-lg-9 site-link"> <ul class="list-inline"> <li>友情链接:</li><li><a href="https://ai.jb51.cc/" title="ai导航是编程之家旗下ai方向的ai资讯、ai工具类集合导航站。" target="_blank" rel="nofollow">ai导航</a></li></ul> <ul class="list-inline"> <li><a href="https://www.jb51.cc" title="编程之家">编程之家</a></li>-<li><a href="https://t5m44pq3f7.jiandaoyun.com/f/638ca61b7b079a000a5d2dd6" rel="nofollow" title="我要投稿" target="_blank">我要投稿</a></li>-<li><a target="_blank" rel="nofollow" href="https://t5m44pq3f7.jiandaoyun.com/f/638ca8c69ad234000a79561f" title="广告合作">广告合作</a></li>-<li><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=76874919&site=qq&menu=yes">联系我们</a></li>-<li><a href="https://www.jb51.cc/disclaimers.html" title="免责声明">免责声明</a></li>-<li><a href="https://www.jb51.cc/sitemap/all/index.xml" title="网站地图" target="_blank">网站地图</a></li> </ul> <div>版权所有 © 2018编程之家<a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow">闽ICP备13020303号-8</a> </div> </div> <div class="col-sm-12 col-md-3 col-lg-3"><img src="https://www.jb51.cc/qrcode.jpg" width="90" alt="微信公众号搜索 “ 程序精选 ” ,选择关注!"> <div class="pull-right">微信公众号搜<span class="text-danger">"智元新知"</span>关注<br />微信扫一扫可直接关注哦!</div> </div> </div> </div> </footer> <script> (function () { var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(bp, s); })(); </script> <script src="https://www.jb51.cc/js/count.js"></script> </body> </html>