JavaScript
es6
es2015

ES6における変数宣言の基礎


前置き

ES2015における変数宣言には3種類ある。

var,let,constの3種。varは推奨されない。


var

再宣言、再代入が可能。

var a;

a = 1; //二種類の書き方。
var b = 2; //どちらの書き方でもよい。
console.log(a); // 1
console.log(b); // 2
var a = 3; //再宣言
console.log(a); // 3
a = 4; //再代入
console.log(a); // 4

関数スコープである。

if(true){

var a = 1;
}
console.log(a); // 1
// これは通る。

function hello(){

var b = 1;
}
hello();
console.log(b); // b is not defined
// これはエラー。

変数の再定義や再代入を防ぐため、基本的にvarは使わない方がいい。


let

再定義ができない。再代入が可能。

let a = 1;

console.log(a); // 1
a = 2; // 再代入はできる。
console.log(a); // 2
let a = 3; // ここでエラー。
console.log(a); // 再宣言はできない。

ブロックスコープである。

if(true){

let a = 1;
}
console.log(a); // エラー: a is not defined
// ブロック外では呼び出せない。

function hello(){

let b = 1;
}
hello();
console.log(b); // エラー: b is not defined
// 同様に、ブロック外では呼び出せない。


const

再宣言も再代入もできない。


const a = 1;
console.log(a); // 1
const a = 2; // エラー。再宣言できない。
a = 2; // エラー。再代入できない。a++;とかも勿論だめ。

ブロックスコープである。ブロック外で呼び出せない例はletの場合と同じなので省略。


宣言時にvar,let,constどれも書き忘れると

function hello(){

a = 1;
}
hello();
console.log(a);// 1
// グローバル変数になる。

もちろん非推奨。グローバル変数を作りたいなら関数外で宣言しよう。


まとめ

関数宣言時はlet、もしくはconstを使おう。