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
相关推荐
小凯在掘金2 小时前
为什么箭头函数不能作为构造函数?
前端·javascript
可乐鸡翅yeah_3 小时前
网页端 M3U8 播放器性能监控,怎么看播放卡顿指标
javascript·ffmpeg·音视频·safari·m3u8
可乐鸡翅yeah_3 小时前
M3U8 防盗链 URL‑Token 签名,新手开发实操避坑
开发语言·javascript·ios·音视频·safari
2603_965896623 小时前
JS原型与原型链|对象继承与实例底层原理
开发语言·javascript·原型模式
JustHappy3 小时前
「vConsole MCP🛠️」我让 AI 直接看见任何 H5 的日志和请求帮你 debug
前端·javascript·程序员
codeGoogle4 小时前
Vue3 UIKit 实战:把聊天、会话、主题和移动端适配全部封装好
前端
大龄秃头程序员4 小时前
iOS Method Swizzling 的工程化实践:如何处理多重交换与第三方冲突
前端
liangshanbo12154 小时前
Webpack 文件指纹面试题整理
前端·webpack·node.js
xieter5 小时前
【技术精选】Node.js 核心事件循环机制与异步 I/O 深度剖析 (2026-10-02)
前端·javascript
计算机魔术师5 小时前
Ethan Mollick 谈点与群:智能体自组织为何让管理假设失效
前端