JavaScriptの中のvar , let , const : cheatsheet



var


The var ステートメントはJavaScriptの変数を宣言します.
  • は関数スコープです.
  • は、一時的なデッドゾーンの対象となりません.
  • これは、グローバルプロパティを作成しますwindow 同じ名前で.
  • を返します.
  • は宣言可能です.
  • 関数スコープまたはグローバルスコープ

    var グローバルスコープ内にグローバル変数を作成します.また、グローバルプロパティを作成しますwindow 同名
    var city = "Florence";
    
    console.log(window.city); // "Florence"
    
    関数の内部で宣言されると、変数はその関数にスコープされます:
    var city = "Florence";
    
    function bubble() {
      var city = "Siena";
      console.log(city);
    }
    
    bubble(); // "Siena"
    
    console.log(city); // "Florence"
    
    var 宣言には、
    function bubble() {
      city = "Siena";
      console.log(city);
      var city; // hoists
    }
    
    bubble(); // "Siena"
    

    偶然のグローバル変数


    任意の文なしで割り当てられた変数var , let , or const , デフォルトでグローバル変数になります.
    function bubble() {
      city = "Siena";
      console.log(window.city);
    }
    
    bubble(); // "Siena"
    
    この動作を中和するには、strict modeを使用します.
    "use strict";
    
    function bubble() {
      city = "Siena";
      console.log(window.city);
    }
    
    bubble(); // ReferenceError: assignment to undeclared variable city
    

    再署名可能で再宣言可能な


    で宣言された変数var 後で再割り当てすることができます.再宣言の例
    function bubble() {
      var city = "Florence";
      var city = "Siena";
      console.log(city);
    }
    
    bubble(); // "Siena"
    
    再署名の例:
    function bubble() {
      var city = "Siena";
      city = "Florence";
      console.log(city);
    }
    
    bubble(); // "Florence"
    

    レット


    The let ステートメントはJavaScriptの変数を宣言します.
  • はブロックスコープです.
  • は、一時的なデッドゾーンの対象です.
  • 任意のグローバルプロパティを作成しませんwindow .
  • を返します.
  • は宣言できません.
  • ブロックスコープ


    と宣言された変数let 上の任意のグローバルプロパティを作成しませんwindow :
    let city = "Florence";
    
    console.log(window.city); // undefined
    
    関数の内部で宣言されると、変数はその関数にスコープされます:
    let city = "Florence";
    
    function bubble() {
      let city = "Siena";
      console.log(city);
    }
    
    bubble(); // "Siena"
    
    console.log(city); // "Florence"
    
    ブロック内で宣言されると、変数はそのブロックにスコープされます.ブロックステートメントの例
    let city = "Florence";
    
    {
      let city = "Siena";
      console.log(city); // "Siena";
    }
    
    console.log(city); // "Florence"
    
    if ブロック
    let city = "Florence";
    
    if (true) {
      let city = "Siena";
      console.log(city); // "Siena";
    }
    
    console.log(city); // "Florence"
    
    var 代わりに、ブロックは気にしません.
    var city = "Florence";
    
    {
      var city = "Siena";
      console.log(city); // "Siena";
    }
    
    console.log(window.city); // "Siena"
    

    一時的なデッドゾーン

    let 宣言はhoistingすることになっていますが、一時的なデッドゾーンは以下のようになります.
    function bubble() {
      city = "Siena";
      console.log(city); // TDZ
      let city;
    }
    
    bubble();
    
    // ReferenceError: can't access lexical declaration 'city' before initialization
    
    一時的なデッドゾーンはアクセスを妨げるlet 初期化前の宣言.別の例
    function bubble() {
      console.log(city); // TDZ
      let city = "Siena";
    }
    
    bubble();
    
    // ReferenceError: can't access lexical declaration 'city' before initialization
    
    両方の例では例外は同じであることが分かります:時間的なデッドゾーンが蹴られたという証拠.
    トピックの更なるリソースTemporal dead zone demystified .

    再署名可能で、再宣言できない


    で宣言された変数let 再宣言できません.スロー宣言の例
    function bubble() {
      let city = "Siena";
      let city = "Florence";
      console.log(city);
    }
    
    bubble(); // SyntaxError: redeclaration of let city
    
    妥当な再割り当ての例
    function bubble() {
      let city = "Siena";
      city = "Florence";
      console.log(city);
    }
    
    bubble(); // "Florence"
    

    コンスト


    The const ステートメントはJavaScriptの変数を宣言します.
  • はブロックスコープです.
  • は、一時的なデッドゾーンの対象です.
  • 任意のグローバルプロパティを作成しませんwindow .
  • は無視できない.
  • は宣言できません.
  • ブロックスコープ


    と宣言された変数const 上の任意のグローバルプロパティを作成しませんwindow :
    const city = "Florence";
    
    console.log(window.city); // undefined
    
    関数の内部で宣言されると、変数はその関数にスコープされます:
    const city = "Florence";
    
    function bubble() {
      const city = "Siena";
      console.log(city);
    }
    
    bubble(); // "Siena"
    
    console.log(city); // "Florence"
    
    ブロック内で宣言されると、変数はそのブロックにスコープされます.ブロックステートメントの例{} :
    const city = "Florence";
    
    {
      const city = "Siena";
      console.log(city); // "Siena";
    }
    
    console.log(city); // "Florence"
    
    if ブロック
    const city = "Florence";
    
    if (true) {
      const city = "Siena";
      console.log(city); // "Siena";
    }
    
    console.log(city); // "Florence"
    

    一時的なデッドゾーン

    const 宣言はhoistingすることになっていますが、一時的なデッドゾーンは以下のようになります.
    function bubble() {
      console.log(city);
      const city = "Siena";
    }
    
    bubble();
    
    // ReferenceError: can't access lexical declaration 'city' before initialization
    

    再説明できない、再宣言できない


    で宣言された変数const 再宣言できません.再宣言の例throws :
    function bubble() {
      const city = "Siena";
      const city = "Florence";
      console.log(city);
    }
    
    bubble(); // SyntaxError: redeclaration of const city
    
    再割り当ての例を示します.
    function bubble() {
      const city = "Siena";
      city = "Florence";
      console.log(city);
    }
    
    bubble(); // TypeError: invalid assignment to const 'city'