什么叫 “执行上下文”(执行上下文环境)
在浏览器执行代码之前;会先做一些准备工作;例如把声明的变量和函数提升到全局最前面;
例如:
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中多次调用函数,产生多个执行上下文环境;也出现一个名为“栈”的东西,“栈”---后进先出;执行上下栈;
整个过程是压栈和出栈;
原文:https://www.cnblogs.com/jyjy28/p/14862164.html