为什么 JavaScript 不能提升初始化?

问题描述

我现在正在研究起重概念,但我不明白为什么 提升只能用于声明,不能用于初始化。

声明 O

catName("cat");

function catName(name){
  console.log(name) // return cat
}

初始化 X

console.log(num); // return undefined
var num;
num = 6;

解决方法

...为什么提升只能用于声明,不能用于初始化

可以与初始化一起工作(实际上,var 变量已初始化——其值为 {{1 }}),只是没有为 undefined 定义提升初始化表达式。为函数声明定义了提升初始化:函数的绑定(松散地,变量)被声明并且用函数对象初始化:

var

只是 console.log(example); // Shows the function function example() { } 不是这样定义的,尤其是因为提升初始化表达式(而不是 var)会比提升函数标识符的初始化复杂得多,因为 {{ 1}} 初始值设定项可以是任意表达式。因此,undefined 变量用 var 初始化。

快进几年,varundefinedlet 的初始化根本没有提升(只有声明),导致我们进入 Temporal Dead Zone您无法访问它们的声明和初始化,因为这被认为比提升 const 更有用:

class