学习执行上下文
什么叫 “执行上下文”(执行上下文环境)
在浏览器执行代码之前;会先做一些准备工作;例如把声明的变量和函数提升到全局最前面;
例如:
console.log(a); // undefined
var a = 10;
浏览器运行的过程大概如此:
先做准备工作
var a; // 先把a提升到最前面;然后再开始执行;所以这个时候a已经声明了但是还没有赋值,所以值为undefined;
console.log(a);
a = 10;
全局准备工作
1.变量,函数表达式-----变量声明,默认赋值为undefined;
2.this---赋值;(全局this)
3.函数声明---赋值
这三种数据准备情况我们称为 “执行上下文” 或者 “执行上下文环境”
执行上下文环境分两种:全局和函数
函数每次被调用都会产生一个新的执行上下环境,因为每次都调用都有可能有不同的参数;
函数准备工作
1.参数---赋值
2.argument--赋值
3.自由变量的取值作用域---
在js中多次调用函数,产生多个执行上下文环境;也出现一个名为“栈”的东西,“栈”---后进先出;执行上下栈;
整个过程是压栈和出栈;
例如:
let a = 10, // 1.先进入全局上下文环境
fn,
bar = (x) => {
let b = 5;
fn(x + b); // 3.进入fn上下文环境
};
fn = (y) => {
let c = 5;
console.log(y + c);
};
bar(10); // 2.进入bar函数上下文环境
处于活动状态的上下文环境只有一个;
一开始是全局上下文环境是活动状态的;在运行过程中遇到了bar函数,然后创建bar函数的上下文环境并把他压入栈内,并设置为活动状态;
在运行bar函数时遇到fn函数,创建fn的上下文环境,并压入栈内,设置为活动状态;在fn执行完后出栈并销货;然后回到bar函数,也是执行完后并销毁;

浙公网安备 33010602011771号