13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Uncaught ReferenceError: Cannot access '***' before initialization at

Last updated at Posted at 2020-07-17

javascriptのエラーメモ。

Uncaught ReferenceError: Cannot access '***' before initialization at main.js:12

原因

実行コードより後に定義した引数を使用した場合や、スコープの外から呼び出した時に表示されるエラーです。

main.js
console.log(c);
let c = 0;

letで宣言した値は、Javascriptエンジンによるundefinedの初期化が行われません。
(※varの場合はundefinedとなる)

解決

変数の定義後に呼び出せばOK。

ポイントは、Javascriptでは初期化は巻き上げられないということです。

main.js
let c = 0;
console.log(c);

関数宣言であれば、定義前に実行しても巻き上げられて、正常に動作します。

sample.js
greeting("Tom"); // "hello Tom" 

function greeting(name) {
   console.log("hello " + name);
}

下記のように、無名関数を変数に格納して、関数の定義より上で実行すると…

sample.js
greeting("Tom"); // "Uncaught ReferenceError" 

const greeting = function(name) {
  console.log("hello " + name);
}

Uncaught ReferenceErrorになります。

関数式と関数宣言の挙動の違いにも注意しましょう。

参考

変数の巻き上げ
MDN/Hoisting

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?