文章参考:
time.geekbang.org/column/arti… github.com/mqyqingfeng…
执行上下文
**定义:**当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。
调用栈
调用栈是javascript引擎追踪函数执行的一个机制,通过调用栈就能够了解函数之间的调用关系。javascript利用栈这种数据结构管理执行上下文。
var a = 0;
function add(a + b) {
returan a + b;
}
function sum(c) {
return c + add(2, 3);
}
sum(a);
以上代码执行调用栈如下:
可以看到调用栈如果不能有序退出那么就会造成栈溢出,这种情况一般会发生在递归调用结束条件有问题情况等等。
块级作用域
作用域决定了代码区块中变量和其他资源的可访问性。
ES6 之前javascript没有块级作用域,只有全局作用域和函数作用域。var、let、const是js定义变量的三个关键词,其中var和let、const有本质不同。let 和 const 都是es6语法。两者都支持块级作用域,并没有变量提升现象,即:不会再编译阶段将声明放置到代码顶部。而在javascript为了加入块级作用域,引入了词法环境这一概念。我们可以简单地认为,var以及function声明的变量加入到环境变量,而let以及const声明的变量加入到词法环境当中。
我们可以通过一个函数的创建执行来分析这两种变量的不同。
function strong(){
var a = 1;
let b = 2;
{
var c = 3;
let d = 4;
console.log(c)
console.log(d)
}
console.log(a)
console.log(b)
console.log(c)
}
foo()
当函数创建并执行的时候,会产生如下的调用栈:
当执行到console.log(c) 的时候,调用栈如下:
可以看到 let , const 等块级作用域变量会直接放到词法环境中,首先在这里寻找变量,如果没有再去变量环境中寻找。块级代码执行完后,这些变量会被词法环境栈直接弹出。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!