xml地图|网站地图|网站标签 [设为首页] [加入收藏]

软件资讯

当前位置:美高梅游戏网站 > 软件资讯 > JavaScript深入之执行上下文栈

JavaScript深入之执行上下文栈

来源:http://www.gd-chuangmei.com 作者:美高梅游戏网站 时间:2019-11-19 08:03

JavaScript 深入之执行上下文栈

2017/05/13 · JavaScript · 执行上下文

原文出处: 冴羽   

已离开简书,原因参见 http://www.jianshu.com/p/0f12350a6b66。

顺序执行?

如果要问到JavaScript代码执行顺序的话,想必写过JavaScript的开发者都会有个直观的印象,那就是顺序执行,毕竟

var foo = function () { console.log('foo1'); } foo(); // foo1 var foo = function () { console.log('foo2'); } foo(); // foo2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var foo = function () {
 
    console.log('foo1');
 
}
 
foo();  // foo1
 
var foo = function () {
 
    console.log('foo2');
 
}
 
foo(); // foo2

然而去看这段代码:

function foo() { console.log('foo1'); } foo(); // foo2 function foo() { console.log('foo2'); } foo(); // foo2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function foo() {
 
    console.log('foo1');
 
}
 
foo();  // foo2
 
function foo() {
 
    console.log('foo2');
 
}
 
foo(); // foo2

打印的结果却是两个foo2。

刷过面试题的都知道这是因为JavaScript引擎并非一行一行地分析和执行程序,而是一段一段地分析执行。当执行一段代码的时候,会进行一个“准备工作”,比如第一个例子中的变量提升,和第二个例子中的函数提升。

但是本文真正想让大家思考的是:这个”一段一段”中的“段”究竟是怎么划分的呢?

到底JavaScript引擎遇到一段怎样的代码时才会做’准备工作’呢?

虽人微言轻,但也要有自己的态度。

可执行代码

这就要说到JavaScript的可执行代码(executable code)的类型有哪些了?

其实很简单,就三种,全局代码、函数代码、eval代码。

举个例子,当执行到一个函数的时候,就会进行准备工作,这里的’准备工作’,让我们用个更专业一点的说法,就叫做”执行上下文(execution contexts)”。

文章可以在我的 Github https://github.com/mqyqingfeng/Blog 查看

本文由美高梅游戏网站发布于软件资讯,转载请注明出处:JavaScript深入之执行上下文栈

关键词: