【JavaScript】ブロックスコープと関数スコープ

  • このエントリーをはてなブックマークに追加

varで宣言された変数は関数スコープを持たない。しかし、ブロックスコープを持つ。
letおよびconstで宣言された変数は関数スコープを持ち、ブロックスコープを持たない。



2008年に発売された「JavaScript The Good Parts」では、
varキーワードで宣言された変数は関数スコープしか持たず、ブロックスコープがなかった。
しかし、その後の JavaScript の進化に伴い、ES6(ECMAScript 2015)からletおよびconstといったブロックスコープを持つ変数宣言が導入された。


function example() {

    if (true) {
        var x = 10; // ブロック外でも有効
        const y = 20; // ブロック内でのみ有効
        let z = 30; // ブロック内でのみ有効
    }

    // xはブロックスコープを持たず関数スコープを持つのでundefinedにならない。
    if (typeof x === 'undefined') {
        console.log('xはundefined');
    } else {
        console.log('x = ', x);
    }

    // yはブロックスコープを持ち、yは関数スコープを持たないのでundefinedになる。
    if (typeof y === 'undefined') {
        console.log('yはundefined');
    } else {
        console.log('y = ', y);
    }

    // zはブロックスコープを持ち、zは関数スコープを持たないのでundefinedになる。
    if (typeof z === 'undefined') {
        console.log('zはundefined');
    } else {
        console.log('z = ', z);
    }

}

example();
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*