JavaScript 执行上下文 – JS 代码如何在幕后运行

结论: JavaScript执行上下文分为两种类型:全局的和函数式的。
变量对象在创建阶段进行初始化,逻辑和变量赋值在运行时阶段进行处理。
当调用函数时,上下文按后进先出的顺序压入堆栈,并在执行后弹出。
变量提升会导致 var 在声明之前访问时变为未定义,并且 let/const 存在临时死区。
作用域链决定了变量的访问顺序,而 JIT 编译则优化了代码执行。
了解执行上下文,避免变量污染,提高代码可维护性。

javascript怎样运行

环境初始化:加载HTML/CSS、创建DOM/CSSOM、创建全局上下文。

代码解析执行:依次解析JS,并在函数调用时创建新的上下文压入堆栈。

事件循环异步:单线程,同步执行,事件队列中的异步操作(setTimeout、Promise)。

变量提升:函数和变量先声明,后赋值。

作用域链:通过引用链访问外部变量,影响闭包。

微宏任务:Promise回调在setTimeout之前执行,先清除微任务,再清除宏任务。

自己掂量一下。

js 变量声明易混淆的几点知识

变量的优先级增加:函数 > 变量。

增加函数级别:先增加函数声明,再增加变量声明。

连续任务:num4 和num2 不会晋升。

如果判断内部变量提升:Firefox 不会宣传块级作用域函数,而 Chrome/IE 会宣传。

函数作用域中的赋值:子作用域可以访问父作用域,但作用域字符串不会改变。

验证示例: 1 . var x = 1 ;函数 foo(x) { var x = 3 ; var y = 函数() { x = 2 ;控制台.log(x); }; y();控制台.log(x);退回药品; } var z = foo(); // 2 2 2 . var x = "abc";函数 foo(x) { var x = c; var y = function() { 返回 x; };退回药品; } var c = {a:1 }; var z = foo(); var b = z(); console.log(b === c); // 正确 3 . var x = "abc";函数 foo(x) { var x = c; var y = function() { x.a++;返回 4
称量一下自己的体重。