JavaScriptの変数のスコープについて学ぶ

白石俊平
2008/05/23 18:00

今回と次回でJavaScriptにおける変数のスコープについて学びます。今回は、スコープについての基本的な事柄を軽く復習するとしましょう。

  1. 関数本体の外で、変数宣言を行う。
  2. プログラムのいずれかの箇所で、varキーワードをつけずに変数宣言を行う

 以下で使用されている変数、i、j、kは全てグローバル変数です。

i = "global";
var j = "global";

function func() {
  k = "global";
  var l = "local"; // ローカル変数
}

 また、上のコードには実はもう一つグローバル変数が含まれています。それは何でしょう?

 答えは……

 "func"です。関数宣言は、実は以下のようなコードと等価だというのは連載の第三回で学びましたね。

var func = function() {
  ...
};

 さて、グローバル変数の宣言方法の二番目(varキーワードをつけずに変数宣言する。サンプル中では変数"k")ですが、わかりづらいので利用を控えた方が賢明です。特定の関数(ここではfunc())を呼び出したか否かによって、グローバル変数が宣言されているかどうかが変化する、というのは非常にわかりにくい動作です。

 いっそのことこの宣言方法のことは忘れてしまって、「変数宣言は常にvarキーワードを用いて行う」位の気持ちでいた方が、バグの少ないプログラムに繋がると思います。

ちょっとマニアックなTIPS:関数内のスコープは一つだけ!

 あと、スコープに関してもう少しマニアックな話題を補足しておきましょう。まず一つ目は、「ブロックスコープ」が存在しないということです。

 C/C++やJavaをご存知の方は、「中括弧を用いてスコープを定義できる」のが普通であり、これを「ブロックスコープ」と呼びます。単純に中括弧を用いてスコープを細かく区切ったり、if文やforループに続く中括弧の中で宣言した変数には、ブロックの外からアクセスできないというものです。

 では、JavaScriptでブロックスコープを使用した(ように見える)次のサンプルコードを見てください。

  • コメント(3件)

#1 uchima  - 2008/07/24 09:37:29

早く続きが読みたいです。せめてDojoコードを読む手前までは連載を続け... 続きを見る
» 不適切なコメントを報告する

#2 tomita  - 2008/07/24 16:05:05

builder編集部 冨田です。 ご要望、ありがとうございます。改めて白... 続きを見る
» 不適切なコメントを報告する

#3 大野晋一  - 2008/07/24 16:15:31

担当の大野です。間が空いてしまっていて恐縮です。来週に掲載予定です... 続きを見る
» 不適切なコメントを報告する
記事に関係する情報をコメントでお寄せください

ニックネーム : CNET_IDにログインしてコメントする

コメント本文(必須) :
  • 新着記事
  • 人気記事
  • 特集
  • ブログ