前言

Vue的生命周期和JS异步都是有很多文章的知识点,我之前也是一知半解,基本够用。

但是直到我在开发的时候真的遇到了问题,才发现如果不把这些知识点融汇到一起,很难解决实际问题。

我甚至觉得这是我离尤雨溪最近的一次。

生命周期

生命周期就是LifeCycle,生命周期在Vue中更为直观,它很好的描述了一个Vue项目从诞生到销毁的全部过程。

我还是引用Vue的官方文档:

因为本文只涉及到了Create/Mount两个生命周期,所以我也只对这两个周期进行叙述。

beforeCreate

这是第一个生命周期函数,指的是实例在被完全创建之前,此时为一个空的实例对象,只有一些默认的生命周期函数和默认的事件,并且此时data和methods中的内容还没有被初始化,也就不能被调用。

created

此时data,methods都已经被初始化好,可以被调用。如果你想在渲染时先获取到数据,可以考虑把axios语句放在这里。

这种说法是比较常见的一种,但是考虑到axios的异步,我很怀疑放在created与mounted内是否有较大的性能差距。
而如果要获取并且改变dom,似乎就要放在mounted中,总之这里需要更多的证据。

而在这两个周期之间,此时Vue开始编辑模板,执行相关的逻辑,并最终在内存中生成一个编译好的最终模板字符串,并渲染为DOM。但是还没有挂载到真正的页面中去。

beforeMount

此时,页面中的元素还没有被替换,只是之前的模板字符串。例如可以尝试着写一个插值,通过innerText获取这一段,看看是{{something}}还是真正的数据。答案是前者。

接下来,就是要把已经编译好的模板替换至页面。

Mounted

这是实例创建期间的最后一个生命周期函数,当mounted执行完后实例就已经被完全创建完毕,此时内存中的模板字符串已经被真实的挂载到页面中,而用户可以看到完成渲染的页面。

JavaScript异步

因为JavaScript是一个单线程语言,并没有多线程,所以JS也不能同时执行很多个语句,绝大多数情况下都是顺序执行语句,也因此衍生出了非常多的面试题。而如果一条语句不能够正常执行,接下来的语句都不能再正常执行。

所以,JavaScript引入了异步这个概念,但问题是现在会更难搞懂语句的执行顺序。

例如:

console.log("1");
setTimeout(()=>{console.log("2");
},0);
console.log("3");

正确答案是132,而不是123。

因为设置了setTimeout,语句会在延时之后执行,即在条件符合之后才会开始执行,这就是异步执行的特点。

而在同步语句中执行异步语句,则是基于Event Loop。

这里对于操作来说不是特别重要,如果你对这个概念感兴趣可以访问:

什么是 Event Loop? - 阮一峰的网络日志​www.ruanyifeng.com

那么,我们还可以对这两种语句,引出一个分类,分别是宏任务微任务。

相同的,如果你对这个概念感兴趣可以访问:

javaScript macro-task(宏任务)与micro-task(微任务)​www.jianshu.com

在这里没什么必要展开,这些概念别人比我解释的更清楚,重要的是,我想引出一个结论:

JavaScript作为单线程语言,并没有多线程的语言的语法特点,但是这也是JavaScript具有其他语言不具有的优势的原因。

对于语句来说,在event loop中,JS会先执行一个宏任务,而如果遇到微任务,会将其放入到微任务的event list里,而不是立即执行

当宏任务执行完毕后,JS会查看微任务的event list,并且再依此执行微任务。

所以,即使setTimeout在3之前,也不会出现等待后输出2再输出3的情况。

最后

至于为什么我需要把这两个知识点单独拉到一篇文章里分析,主要是因为下面这篇文章:

https://zhuanlan.zhihu.com/p/260523407​zhuanlan.zhihu.com

感谢:

黑马程序员39期web前端-vue生命周期_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

https://blog.csdn.net/qq_36117508/article/details/81609913​blog.csdn.net

js中立即执行函数会预编译吗_浅析Vue的生命周期以及JS异步相关推荐

  1. js中立即执行函数会预编译吗_面试官:聊聊对Vue.js框架的理解

    作者:yacan8 https://github.com/yacan8/blog/issues/26 本文为一次前端技术分享的演讲稿,所以尽力不贴 Vue.js 的源码,因为贴代码在实际分享中,比较枯 ...

  2. js中立即执行函数会预编译吗_作为前端你了解JavaScript运行机制吗?

    作为前端工程师,大家都知道js是前端一开始就要学会的知识点,js的代码你会写了,那js的运行机制你了解吗?只有了解了js的运行机制,才能在工作中如鱼得水,今天就跟随珠峰的老师一起来了解下js的运行机制 ...

  3. js字符串替换_浅析Vue的生命周期以及JS异步

    前言 Vue的生命周期和JS异步都是有很多文章的知识点,我之前也是一知半解,基本够用. 但是直到我在开发的时候真的遇到了问题,才发现如果不把这些知识点融汇到一起,很难解决实际问题. 我甚至觉得这是我离 ...

  4. js中立即执行函数会预编译吗_JavaScript预编译过程

    什么是预编译? 当js代码执行时有三个步骤: 1.语法分析,这个过程检查出基本的语法错误. 2,预编译,为对象分配空间. 3,解释执行,解释一行执行一行,一旦出错立即停止执行. 预编译发生在代码执行的 ...

  5. js中立即执行函数会预编译吗_js变量提升和函数提升

    把变量提升函数提升拿出来讲,一看就知道是老前端搬砖工了,其实这些js的基础本质的东西,很有必要去了解,可以活跃思维,而且可以在研究这个的过程中,找到当初设计这门语言的人的想法,然后让自己不仅仅是对这个 ...

  6. JS中自动执行函数小结

    JS中自动执行函数小结 请看以下两个函数: 1.function a(){ 2.    alert("a") 3.} 1.var b= function(){ 2.    aler ...

  7. js中自执行函数的作用

    当一个页面两个人写定义的相同的变量名就会发生冲突 污染全局 自执行函数的作用就出来了,自执行函数里面是一个单独的作用域不会影响其他的也不会污染全局 (function(){ })(); //建立一个单 ...

  8. js中自执行函数(function(){})()和(function(){}())区别

    方式一,调用函数,得到返回值.强制函数直接量执行再返回一个引用,引用在去调用执行 方式二,调用函数,得到返回值.强制运算符使函数调用执行 (function(){})(); 是 把函数当作表达式解析, ...

  9. JS数据类型及函数的预编译

    1.JS总体上分为:原始值和引用值 原始值分为:Number.Boolean.String.undefined.null;原始值不可改变的值,存储在栈[stack]的,先进后出! 引用值:array. ...

  10. js中的匿名函数和匿名自执行函数

    1.匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景: <input type="button" value="点击" id=& ...

最新文章

  1. wamp的mysql单独使用_Windows 7+8.1+10 单独安装配置 PHP+Apache+MySQL(不使用 WAMP)
  2. 手机QQ重构移动社交市场
  3. [BJOI2015] 树的同构
  4. QTP之对测试用例的自动化过程的分解
  5. easyui datagrid local pager 表格本地分页
  6. 测试linux系统的程序员,日常测试Linux命令
  7. 【深度优先搜索】计蒜客:置换的玩笑
  8. C++ 类型转换操作与操作符重载 operator type() 与 type operator()
  9. MySQL|Aborted connection 日志分析
  10. 模块[camera]_摄影基础知识: 曝光补偿完全指南
  11. 电脑自动出现html文件,当前页面发生脚本错误 电脑总出现当前页面脚本错误怎么办?...
  12. adm单master节点
  13. 中国人民银行计算机招聘笔试题和答案(笔试真题)
  14. 【Pygame小游戏】Python版有迷宫嘛?原来藏在个地方呀~
  15. 华为云WeLink:让智能办公行走云端
  16. Python实现的一个简洁轻快的后台管理框架.支持拥有多用户组的RBAC管理后台,不用配置各种运行环境
  17. 直流电机的电流、转速、电压的关系
  18. 织梦更新主页html慢,织梦后台更新网站HTML卡死的解决方法
  19. 作为技术负责人,如何从0搭建公司后端技术栈
  20. [区块链]初识R3-Corda,解析区块链结构

热门文章

  1. Hibernate_02
  2. Node做网页爬虫时遇到的Html entites对象造成乱码
  3. MySQL常用命令集锦
  4. 核心JavaScript——词法结构
  5. 接口 与 抽象类 区别
  6. POJ 2406 Power Strings
  7. execute、executeUpdate、executeQuery三者的区别
  8. 一个有趣的例子,JS+CSS实现【兴趣是最好的老师】
  9. 几个学习git的地方
  10. IIS 7.5学习笔记(二)IIS简史:从IIS 1.0到IIS 7.5