JavaScript Let
このlet
キーワードは
ES6(2015)で導入されました。
で定義された変数let
は再宣言できません。
で定義された変数は、let
使用する前に宣言する必要があります。
で定義された変数にlet
はブロックスコープがあります。
再宣言できません
で定義された変数は再宣言let
できません。
誤って変数を再宣言することはできません。
あなたとこれlet
を行うことはできません:
例
let x = "John Doe";
let x = 0;
// SyntaxError: 'x' has already been declared
あなたと一緒var
に:
例
var x = "John Doe";
var x = 0;
ブロックスコープ
ES6(2015)より前は、JavaScriptにはグローバルスコープと関数スコープしかありませんでした。
ES6では、2つの重要な新しいJavaScriptキーワードlet
とが導入されましconst
た。
これらの2つのキーワードは、JavaScriptでブロックスコープを提供します。
{}ブロック内で宣言された変数には、ブロック外からアクセスできません。
例
{
let x = 2;
}
// x can NOT be used here
キーワードで宣言された変数は、var
ブロックスコープを持つことはできません。
{}ブロック内で宣言された変数には、ブロック外からアクセスできます。
例
{
var x = 2;
}
// x CAN be used here
変数の再宣言
var
キーワードを使用して変数を再宣言すると、問題が発生する可能性があります。
ブロック内の変数を再宣言すると、ブロック外の変数も再宣言されます。
例
var x = 10;
// Here x is 10
{
var x = 2;
// Here x is 2
}
// Here x is 2
キーワードを使用して変数を再宣言すると、let
この問題を解決できます。
ブロック内の変数を再宣言しても、ブロック外の変数は再宣言されません。
例
let x = 10;
// Here x is 10
{
let x = 2;
// Here x is 2
}
// Here x is 10
ブラウザのサポート
このlet
キーワードは、Internet Explorer11以前では完全にはサポートされていません。
let
次の表は、キーワードを完全にサポートする最初のブラウザバージョンを定義しています。
Chrome 49 | Edge 12 | Firefox 44 | Safari 11 | Opera 36 |
Mar, 2016 | Jul, 2015 | Jan, 2015 | Sep, 2017 | Mar, 2016 |
再宣言
でJavaScript変数を再宣言するvar
ことは、プログラムのどこでも許可されています。
例
var x = 2;
// Now x is 2
var x = 3;
// Now x is 3
を使用let
すると、同じブロックで変数を再宣言することはできません。
例
var x = 2; // Allowed
let x = 3; // Not allowed
{
let x = 2; // Allowed
let x = 3 // Not allowed
}
{
let x = 2; // Allowed
var x = 3 // Not allowed
}
別のブロックで、を使用して変数を再宣言するlet
ことは許可されています。
例
let x = 2; // Allowed
{
let x = 3; // Allowed
}
{
let x = 4; // Allowed
}
巻き上げましょう
で定義された変数は一番上var
に持ち上げられ、いつでも初期化できます。
意味:宣言する前に変数を使用できます。
例
これで結構です:
carName = "Volvo";
var carName;
巻き上げについて詳しく知りたい場合は、JavaScriptの巻き上げの章をご覧ください。
で定義された変数let
もブロックの先頭に持ち上げられますが、初期化されません。
意味:let
宣言される前に変数を使用すると、次のようになります
ReferenceError
。
例
carName = "Saab";
let carName = "Volvo";