JavaScript执行上下文是代码运行时的环境,决定变量、函数和this的值如何被访问;分为全局、函数和eval三种类型,经历创建与执行两阶段,由执行栈管理上下文切换。
JavaScript执行上下文是代码运行时的环境,它决定了变量、函数和this的值在当前作用域中如何被访问和解析。理解执行上下文,是搞懂变量提升、作用域链、闭包和this绑定的关键。
JavaScript中有三种执行上下文:
,只有一个。它确定了全局对象(浏览器中是window)、this指向以及最外层的变量和函数声明。每个执行上下文经历两个阶段:
注意:let/const也会被“提升”,但不会初始化(即存在暂时性死区TDZ),直到声明语句执行才可访问。
JS是单线程的,靠执行栈(Execution Stack)管理上下文。代码从全局开始,每进入一个函数就压入一个新上下文;函数返回就弹出。例如:
function a() { b(); }
function b() { console.log('hi'); }
a();
执行顺序是:全局上下文 → a的上下文 → b的上下文 → b弹出 → a弹出 → 全局继续。
很多看似奇怪的现象,其实都源于执行上下文的机制:
不复杂但容易忽略。