黑马程序员技术交流社区

标题: 【上海校区】javascript的运行机制---栈 [打印本页]

作者: wendyYao    时间: 2018-5-3 17:34
标题: 【上海校区】javascript的运行机制---栈
本帖最后由 wendyYao 于 2018-5-3 18:18 编辑

不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序。因为javascript是一门单线程语言,所以我们可以得出结论:
javascript是按照语句出现的顺序执行的,看到这里读者要打人了:我难道不知道js是一行一行执行的?还用你说?稍安勿躁,正因为js是一行一行执行的,所以我们以为js都是这样的:
运行的最终结果是132,为什么结果不是23呢?
下面我们来分析一下代码运行的入栈和出栈的过程;

首先当调用函数bar()时,此函数就会先入栈,执行console.log(1);

由上图可知:控制台先打印出结果1,执行完毕之后在出栈。   再执行函数bar内部的函数foo,于是函数foo也入栈了。
执行函数foo的内部代码,调用函数        ,于是函数par()也要入栈。
由于函数par()内部执行异步函数setTimeout(),异步函数则会由浏览器内核timer模块来处理
接着在执行par函数中的console.log(3),控制台打印结果为3 ,此时栈的代码执行完毕后,会按照栈的特点进行先进后出,后进先出顺序进行出帐顺序:先函数par()----》后函数foo() ------》最后函数bar
上海传智播客黑马程序员PHP学科


作者: 不二晨    时间: 2018-7-17 13:52
奈斯
作者: wuqiong    时间: 2018-7-17 16:54

作者: 不二晨    时间: 2018-7-18 11:22
奈斯,优秀
作者: 吴琼老师    时间: 2018-7-18 14:34

作者: 摩西摩西OvO    时间: 2018-7-19 17:16





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2