JS --- Verständnis von Var, Let-Variablenförderung und temporärer Totzone (TDZ)

1. Von var und let deklarierte Variablen haben unterschiedliche Gültigkeitsbereiche

Mit var deklarierte Variablen gehören zum Funktionsbereich, während mit let deklarierte Variablen zum Blockbereich gehören

2. Die von var und let deklarierten Variablen haben unterschiedliche Bereiche, und die entsprechenden Variablenförderungen sind ebenfalls unterschiedlich.

Von var deklarierte Variable

Im Funktionsumfang haben die von var deklarierten Variablen nur eine Variablenheraufstufung, und es gibt keine Variableninitialisierungsheraufstufung

 function fn() {
  console.log(name); //undefined,说明存在变量提升,不存在变量初始化提升
    var name=1
}
fn()

Im globalen Bereich oder Blockebenenbereich verfügen die von var deklarierten Variablen über eine Variablenheraufstufung und eine Variableninitialisierungsheraufstufung

{
  console.log(name); //1,说明存在变量提升,存在变量初始化提升
    var name=1
}

Von let deklarierte Variable

Die von let deklarierte Variable existiert in jedem Bereich nur als Variablenheraufstufung und es gibt keine Variableninitialisierungsheraufstufung

im Funktionsumfang

function fn(){
  console.log(name); //报错,'name' before initialization,说明其实存在变量提升,但是没有进行初始化
    let name=1
}
fn()

Blockbereich

  {
      console.log(name); //报错,'name' before initialization,说明其实存在变量提升,但是没有进行初始化
    let name=1
    }

3. Verständnis der temporären Totzone (TDZ)

Wenn in einem Bereich durch let und const deklarierte Variablen vorhanden sind, wird vom Beginn des Bereichs bis zu den durch let und const deklarierten Variablen eine temporäre tote Zone generiert, und auf die let- und const-Deklarationen kann in dieser temporären toten Zone nicht zugegriffen werden

    {  // 块级作用域开始,TDZ开始

            console.log(temp)  // TDZ区域访问变量,报错,Cannot access 'temp' before initialization

            let temp  // 遇到let变量声明,TDZ结束
            console.log(temp) // undefined,变量声明但未赋值
            // 赋值
            temp = 345  
            console.log(temp)  // 345
            // 块级作用域结束
        }
        //在块级作用域外访问
        console.log(temp)  // ReferenceError: temp is not defined,无法访问

Viertens. Zusammenfassung

 1. Wir müssen die Syntax der var-Deklaration schrittweise aufgeben und die Syntax der let- und const-Deklarationen verwenden

2. Variablen müssen vor dem Zugriff deklariert werden (um das Problem der temporären Totzone zu lösen).

おすすめ

転載: blog.csdn.net/h18377528386/article/details/127709790