🗜️

javascriptのvarとletの復習

2022/07/11に公開

はじめに

javascriptにおけるvarとletの違いでも重要なのは以下の点でと考えています。

  • var・・・スコープは関数
  • let・・・スコープはブロック

これは再宣言などにも影響しますが、イベントfunction内でvar変数を利用する場合に困った動作を起こします。

varの場合・・・困った動作

function test1(n,count) {
    for (var i = 0; i < count; i++) {
        setTimeout(() => {
            console.log(n,i);
        }, i * 1000);
    }
}

test1("var3",3);
test1("var5",5);

実行結果

# node test.js
var3 3
var5 5
var3 3
var5 5
var3 3
var5 5
var5 5
var5 5

letの場合・・・意図した動作

function test1(count) {
    for (let i = 0; i < count; i++) {
        setTimeout(() => {
            console.log(i);
        }, i * 1000);
    }
}

test1(3);
test1(5);

実行結果

# node test.js
let3 0
let5 0
let3 1
let5 1
let3 2
let5 2
let5 3
let5 4

まとめ

イベント用の無名functionを利用しない場合はあまり意識しませんが、イベント駆動の処理を記述する場合は基本はletとconstを利用するのがよさそうです。

注意

グローバル変数はvarの有無でglobal配下になるかの違いがある。

Discussion