質問: JavaScript初学者です。 JavaScriptにおいて、宣言と定義の違いはどのようなものでしょうか? 宣言と定義の違いについて調べた際にC++についてこのような記事を見つけました。 > > 型をコンパイラに伝えるのが宣言 > > その名前が参照しているメモリを確保するのが定義 > > > とのことですが、型のないJavaScriptでは宣言と定義では内部的にどのような動きをしているのでしょうか? 当方まだ調査中ですが、ご教授いただけたら幸いです。
回答: まず最初にご理解いただきたいのは、異なるプログラミング言語においては用語も異なるということです。JavaScriptには、「宣言」という用語はありますが「定義」という用語はありません。 JavaScriptにおける宣言とは、変数宣言・関数宣言・クラス宣言という構文を総称するものです。 ``` // 変数宣言 const a = 123; // 関数宣言 function b () { } // クラス宣言 class c { } ``` これらの宣言は、実体の作成を伴います。その意味では、C++における「定義」のほうに近いと言えます(「メモリの確保」というのもJavaScriptに合った言い方ではありませんが)。 一方で、C++の「宣言」に相当するもの、すなわち「型をコンパイラに伝える」というようなはたらきをするものはJavaScriptには存在しません。お察しの通り、JavaScriptは型がなくコンパイルもしないからです。