JavaScript – 変数・スコープ

変数のスコープ

グローバルスコープ/ローカルスコープ

  • var宣言で定義された変数は、その関数内のローカルスコープ
  • var宣言なしで定義された変数は、どこで定義されてもグローバルスコープ

ブロックスコープ

JavaScriptにはブロックスコープの概念はない。

関数の中のif{}やfor{}など複数のブロックで同じ変数名を用いると、関数内で共通の変数になる。

特に、for文のループカウンタなどの一時的な変数は、不用意にvar宣言なしで用いると、予期しないところでグローバルに影響を与えてしまう可能性がある。

関数の引数のスコープ

関数の引数はvarなしで宣言するが、スコープは関数内ローカルとなる。

  • グローバル領域でn = 1を定義
  • f( n )で引数を引き取った後、関数内ではn == 1
  • 関数内でnをインクリメントし、n = 2
  • 関数の結果はf( n ) = 2
  • その後、グローバル領域でn == 1で変化していない

変数操作のタイミング

グローバル変数への操作は、スクリプトがの実行の際に行われる。htmlファイル内であれば、そのファイルが読み込まれた時。別のjsファイルの場合はそれが読み込まれた時。

ローカル変数への操作は、その関数が実行された時。

以下の例では、htmlファイル読み込み時にグローバル変数が定義・参照され、その後ボタンを押すたびにmain()関数が実行され、ローカル変数が定義・参照される。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です