004-执行上下文&事件循环

执行上下文&事件循环

💡 Tips:用于说明 浏览器 对 JavaScript 执行顺序,涉及知识点包含:this指向、变量声明提升、宏任务、微任务等

1、执行上下文

2、执行上下文类型

  1. 全局执行上下文

  2. 函数执行上下文

  3. Eval 函数执行上下文

3、执行上下文的生命周期

  1. 创建阶段

  2. 执行阶段

  3. 回收阶段

4、示例说明

javascript 复制代码
// console.log(a); // Uncaught ReferenceError: a is not defined

// 变量声明提升
console.log(b); // undefined
var b = 123;
console.log(b); // 123

// 函数声明提升
console.log(fn1); // fn1() {}
function fn1() {
  console.log(this);
}

// 全局执行上下文
console.log(this); // Window

// 函数执行上下文 - this指向调用方
fn1(); // Window
const obj1 = { name: 'zhangsan' };
fn1.apply(obj1);  // {name: 'zhangsan'}

5、事件循环机制

6、宏任务

7、微任务

8、同步任务、宏任务、微任务

javascript 复制代码
// 同步任务
var a = 123;
var b = 'zhangsan';
console.log(a);

// 异步任务 - 宏任务&微任务
// 宏任务
setTimeout(() => {
  console.log('setTimeout');
});

// 微任务
new Promise((resolve, reject) => {
  console.log('promise');
  resolve('promise');
}).then(res => {
  console.log('res-', res);
});

9、代码执行顺序 - 示例

javascript 复制代码
var a = 123;

setTimeout(() => {
  console.log('setTimeout');
});
console.log(a);

new Promise((resolve, reject) => {
  console.log('promise');
  resolve('promise');
}).then(res => {
  console.log('res-', res);
});

// 先执行同步任务
// 第6行的打印:123
// 第9行的打印:promise

// 执行微任务
// 第12行的打印:res- promise

// 执行宏任务
// 第4行的打印:setTimeout
相关推荐
代码搬运媛7 小时前
Jest 测试框架详解与实现指南
前端
counterxing8 小时前
我把 Codex 里的 Skills 做成了一个 MCP,还支持分享
前端·agent·ai编程
wangqiaowq8 小时前
windows下nginx的安装
linux·服务器·前端
之歆9 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
发现一只大呆瓜9 小时前
Vite凭什么这么快?3分钟带你彻底搞懂 Vite 热更新的幕后黑手
前端·面试·vite
Maimai108089 小时前
React如何用 @microsoft/fetch-event-source 落地 SSE:比原生 EventSource 更灵活的实时推送方案
前端·javascript·react.js·microsoft·前端框架·reactjs·webassembly
candyTong9 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
kyriewen11 小时前
产品经理把PRD写成“天书”,我用AI半小时重写了一遍,他当场愣住
前端·ai编程·cursor
humcomm11 小时前
元框架的工作原理详解
前端·前端框架
canonical_entropy11 小时前
Attractor Before Harness: AI 大规模开发的方法论
前端·aigc·ai编程