A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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学科

5 个回复

倒序浏览
奈斯
回复 使用道具 举报
回复 使用道具 举报
奈斯,优秀
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马