javascript执行栈
从网上看到
javascript在函数执行前会将要执行的函数都压入一个栈当中
<script>
foo();
function foo() {
setTimeout("alert(1)", 0);
alert(2);
}
</script>
在以上例子中
foo,setTimeout和alert(2)被压入一个栈A当中
"alert(1)"执行语句被压入另一个栈B当中
先栈A或栈B
所以执行的顺序是先输出2在输出1
各位JEers,是这个样子的么?
欢迎大家踊跃发言,哈哈
我开始以为被setTimeout“唤醒”执行的函数有可能会打断正在执行的函数
做了个实验
发现正在执行的函数不会被打断
<script>
setTimeout(function() {
for(var i = 0; i < 10000; i++) {
}
alert("done at\n" + new Date().getTime());
}, 1000);
foo(5000);
foo2(5000);
function foo(offset) {
var now = new Date().getTime();
var con = now + offset;
while(new Date().getTime() < con) {
}
document.writeln("foo1<br />" + new Date().getTime() + "<br /><br /><br />");
}
function foo2(offset) {
var now = new Date().getTime();
var con = now + offset;
while(new Date().getTime() < con) {
}
document.writeln("foo2<br />" + new Date().getTime() + "<br />");
}
</script>
以上例子中
即使
function() {
for(var i = 0; i < 10000; i++) {
}
alert("done at\n" + new Date().getTime());
}
是在setTimeout执行后的1秒被“唤醒”
它也不会打断foo(foo执行过程会花费5秒)
而只是把它放入栈中
以保证它在最快的时间内执行
也就是前面栈都执行完毕之后
想想也符合网上的说法
但心里却还是有些疑问
这个调用栈到底是什么样子的?
上面有错误的话
请大家一定要指出来额
也欢迎大家说说自己的看法
谢谢大家
分享到:
相关推荐
JavaScript 是一种解释型的、基于原型的编程语言,其运行机制是通过执行上下文和执行栈来管理代码的执行过程。执行上下文是JavaScript引擎在处理代码时的一个关键概念,它定义了代码执行的环境,包括变量、函数、...
本文主要讲述了 JavaScript 执行机制的基础知识,包括变量提升、执行上下文、调用栈等概念。本文通过 9 个 demo 和 18 张图,详细地解释了 JavaScript 执行机制的过程。 变量提升(Hoisting) 变量提升是 ...
例如,在处理异步代码时,理解执行栈是如何被更新的,以及 promise 和 async/await 是如何改变函数调用顺序的,对于理解程序的执行流程至关重要。 总结来说,JavaScript 执行上下文、函数堆栈和提升的概念是理解 ...
总的来说,理解和掌握EventLoop的执行顺序对于编写高效的JavaScript代码至关重要。这不仅涉及到代码的执行效率,还直接影响到异步操作的响应速度和用户体验。在实际开发中,合理安排任务类型和执行顺序,可以避免...
在学习JavaScript的过程中,理解和掌握执行栈与执行上下文是相当重要的,因为它们是理解JS运行机制的核心。执行栈是JavaScript引擎用来追踪函数调用的一种数据结构,而执行上下文则是JS代码执行的环境。下面将详细...
JavaScript执行环境及作用域详解: JavaScript的执行环境和作用域是理解这门语言核心概念的关键部分,它影响着变量和函数的作用范围以及生命周期。执行环境定义了变量或者函数有权访问的其他数据,而作用域则决定了...
理解JavaScript的执行顺序是理解代码行为的关键。JavaScript的代码执行可以分为两个阶段:代码检查装载阶段(预编译阶段)和代码执行阶段。 在代码检查装载阶段,JavaScript引擎会进行变量和函数声明,但不会执行...
随着函数的返回,对应的执行上下文会被弹出栈,从而保证了代码的执行顺序。 以下是一个简单的例子来解释执行上下文栈的工作原理: ```javascript function cat(a) { if (a ) { return false; } console.log('...
为了控制JavaScript的执行顺序,我们可以使用多种控制流程语句,如条件语句(if...else)、switch语句、循环(for、while等)、函数调用以及最近流行的异步操作处理工具——Promise和async/await。Promise用于处理...
JavaScript的执行机制是该语言...了解了JavaScript的执行机制后,我们可以通过合理安排代码的执行顺序、合理利用宏任务和微任务、以及合理运用Promise和Web Worker等机制,编写出更为高效和可维护的JavaScript代码。
栈在编程中有着广泛应用,例如在函数调用中,每次函数调用都会形成一个新的执行环境,这些环境按调用顺序压入栈,当函数执行完毕,其对应的环境就会从栈顶弹出。另外,解决回溯问题、括号匹配、深度优先搜索等问题时...
1. **面向过程**:程序由一系列顺序执行的过程组成。 2. **面向对象**:程序由多个对象组成,对象之间通过消息传递相互协作。 #### 类型检测与转换 1. **类型检测**: - `typeof`操作符可以用来检测变量的数据...
Struts2 中拦截器与过滤器的区别及执行顺序 Struts2 中的拦截器(Interceptor)和过滤器(Filter)是两个不同的概念,虽然它们都可以影响请求的处理过程,但它们的作用域、执行顺序和实现机制都有所不同。 拦截器...
在使用JavaScript调试器时,应学会有效地利用其特性,如合理设置断点,通过查看调用栈理解代码执行顺序,以及利用监视表达式来跟踪变量的变化。此外,对于复杂的异步问题,还可以利用Promise或async/await的跟踪,来...
2. 在执行全局任务过程中,遇到函数调用,将函数压入执行栈执行。 3. 处理异步任务的注册,但不立即执行。 4. 所有同步任务执行完毕后,进入事件循环。 5. 从宏任务队列取出一个宏任务执行。 6. 在宏任务执行过程中...
JavaScript执行流程的细节解析涉及到多个核心概念,这些概念构成了JS引擎执行代码的基础。本文将通过一个简单的示例来深入理解这些概念。 首先,全局初始化阶段是JavaScript执行的起点。在这个阶段,JS引擎创建一个...
当主线程执行栈为空时,事件循环会从任务队列中取出一个任务并执行。这意味着定时器的执行顺序可能并不是按设定的时间顺序,尤其是当有同步任务阻塞主线程时。 ### 四、定时器的异步性质 由于JavaScript的单线程...
作用域链决定了变量的查找顺序,它由当前执行上下文的变量对象和所有父级执行上下文的变量对象组成。在作用域链中查找变量时,会从当前作用域开始,如果找不到,则向上遍历作用域链。 6. **闭包**: 闭包是一种...