--- title: 'ReferenceError: assignment to undeclared variable "x"' slug: Web/JavaScript/Reference/Errors/Undeclared_var tags: - Error - Errors - JavaScript - ReferenceError - Strict Mode translation_of: Web/JavaScript/Reference/Errors/Undeclared_var --- <div>{{jsSidebar("Errors")}}</div> <p>JavaScript の <a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a>独自の例外 "Assignment to undeclated variable" は、値が宣言されていない変数に代入されたときに発生します。</p> <h2 id="Message">エラーメッセージ</h2> <pre class="brush: js">ReferenceError: assignment to undeclared variable "x" (Firefox) ReferenceError: "x" is not defined (Chrome) ReferenceError: Variable undefined in strict mode (Edge) </pre> <h2 id="Error_type">エラーの種類</h2> <p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a> でのみ、{{jsxref("ReferenceError")}} の警告が出ます。</p> <h2 id="What_went_wrong">エラーの原因</h2> <p>宣言していない変数に値を代入しています。つまり、 <code>var</code> キーワードを使用せずに代入をしています。宣言した変数と宣言していない変数の間には、予想外の結果を招くいくつかの違いがあります。それが、 strict モードで JavaScript がエラーを発生させる理由です。</p> <p>宣言した変数と宣言していない変数について、3 つの注意点があります。</p> <ul> <li>宣言した変数は、それが宣言された実行コンテキストに制限されます。宣言していない変数は常にグローバルです。</li> <li>宣言した変数は、コードが実行される前に生成されます。宣言していない変数は、それに割り当てるコードが実行されるまで存在しません。</li> <li>宣言した変数は、その実行コンテキスト (関数かグローバル) で設定不可能なプロパティです。 宣言していない変数は、設定可能です (たとえば、削除できます)。</li> </ul> <p>詳細や具体例は、<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/var">var</a></code> 参照ページを見てください。</p> <p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モードのコード</a> でのみ、宣言していない変数割り当てエラーが発生します。非 strict コードでは、それらは暗黙裡に無視されます。</p> <h2 id="Examples">例</h2> <h3 id="Invalid_cases">無効なケース</h3> <p>このケースでは、変数 "bar" は宣言していない変数です。</p> <pre class="brush: js example-bad">function foo() { 'use strict'; bar = true; } foo(); // ReferenceError: assignment to undeclared variable bar </pre> <h3 id="Valid_cases">有効な場合</h3> <p>"bar" を宣言済みの変数にするために、その前に <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/var">var</a></code> キーワードを追加します。</p> <pre class="brush: js example-good">function foo() { 'use strict'; var bar = true; } foo();</pre> <h2 id="See_also">関連情報</h2> <ul> <li><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">Strict モード</a></li> </ul>