JSチュートリアル

JSホーム JSの紹介 JSどこへ JS出力 JSステートメント JS構文 JSコメント JS変数 JS Let JSConst JSオペレーター JS算術 JS割り当て JSデータ型 JS関数 JSオブジェクト JSイベント JS文字列 JS文字列メソッド JS文字列検索 JS文字列テンプレート JS番号 JS番号メソッド JSアレイ JS配列メソッド JS配列ソート JSアレイの反復 JSアレイ定数 JSの日付 JSの日付形式 JS DateGetメソッド JS日付設定メソッド JS数学 JSランダム JSブール値 JSの比較 JS条件 JSスイッチ JSループFor JSループフォーイン JSループの JSループWhile JSブレイク JSIterables JSセット JSマップ JS Typeof JS型変換 JSビット単位 JS RegExp JSエラー JSスコープ JSホイスト JS厳密モード JSこのキーワード JSアロー関数 JSクラス JS JSON JSデバッグ JSスタイルガイド JSのベストプラクティス JSの間違い JSパフォーマンス JS予約語

JSバージョン

JSバージョン JS 2009(ES5) JS 2015(ES6) JS 2016 JS 2017 JS 2018 JS IE /エッジ JSの歴史

JSオブジェクト

オブジェクト定義 オブジェクトのプロパティ オブジェクトメソッド オブジェクト表示 オブジェクトアクセサー オブジェクトコンストラクター オブジェクトのプロトタイプ オブジェクト反復可能 オブジェクトセット オブジェクトマップ オブジェクトリファレンス

JS関数

関数の定義 関数パラメーター 関数の呼び出し 関数呼び出し 機能適用 関数クロージャ

JSクラス

クラスイントロ クラス継承 クラス静的

JS非同期

JSコールバック JS非同期 JSの約束 JS Async / Await

JS HTML DOM

DOMイントロ DOMメソッド DOMドキュメント DOM要素 DOM HTML DOMフォーム DOM CSS DOMアニメーション DOMイベント DOMイベントリスナー DOMナビゲーション DOMノード DOMコレクション DOMノードリスト

JSブラウザBOM

JSウィンドウ JS画面 JSロケーション JSの歴史 JSナビゲーター JSポップアップアラート JSタイミング JSクッキー

JS Web API

WebAPIイントロ WebフォームAPI Web履歴API WebストレージAPI WebワーカーAPI Web Fetch API Web Geolocation API

JS AJAX

AJAXイントロ AJAX XMLHttp AJAXリクエスト AJAX応答 AJAXXMLファイル AJAX PHP AJAX ASP AJAXデータベース AJAXアプリケーション AJAXの例

JS JSON

JSONイントロ JSON構文 JSONとXML JSONデータ型 JSON解析 JSON文字列化 JSONオブジェクト JSON配列 JSONサーバー JSON PHP JSON HTML JSON JSONP

JSとjQuery

jQueryセレクター jQuery HTML jQuery CSS jQuery DOM

JSグラフィックス

JSグラフィックス JSキャンバス JSPlotly JS Chart.js JSグーグルチャート JS D3.js

JSの例

JSの例 JS HTML DOM JSHTML入力 JSHTMLオブジェクト JSHTMLイベント JSブラウザ JSエディター JS演習 JSクイズ JS証明書

JSリファレンス

JavaScriptオブジェクト HTMLDOMオブジェクト


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";