JavaScriptの変数のスコープについて学ぶ
白石俊平
2008/05/23 18:00
今回と次回でJavaScriptにおける変数のスコープについて学びます。今回は、スコープについての基本的な事柄を軽く復習するとしましょう。
- 関数本体の外で、変数宣言を行う。
- プログラムのいずれかの箇所で、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件)
- 特集: JavaScriptのイロハ (19件)
- 昨日のトップ記事
- 2日前
- 4日前
- 5日前
- 8日前
- ホワイトペーパー
- 企画特集
RSA enVision
国内シェアNo1
かつてのERPは死んだ--
仮想化環境に適したサーバブレード新登場!
局所冷却に注目。
グリーンデータセンターの新潮流
Green Enterprise
今が選びどき!百花繚乱スマートフォン
価格から質へと変わるアウトソーシング市場
仲間と情報を共有・公開する楽しみ方は?
REAL IT COOL PROJECT
情報大洪水時代を生き抜くソリューション
NTTComのSaaS型アウトソーシングをレポート
ZDNet Japan ログ管理
Techno Exchange
- エンタープライズサーチ特集!
- データバックアップで事業継続力を向上!
- MicrosoftもOracleもDWH市場に参入!
- なぜ、ERP 導入は敷居が高いのか?
- リバーベッドのSteelheadアプライアンス
- 話題のタグ
脆弱性
JavaScript
Firefox 3
レビュー
Webサービス
ユーザーインタフェース
CSS
iPhone
Safari
Microsoft
Webデザイン
仮想化
Java
ソフトウェア開発
Tips
仮想化ソフトウェア
Mozilla
Mac OS X
ブラウザ
Off Topic
Adobe
入門
RIA
Apple
Google
モバイル
server
Flash
HTML
リファレンス
オープンソース
Database
Windows
SOA
デザイン
小技
Internet Explorer
Ajax
Linux
iPod touch
プロジェクト管理
PHP
UI
データベース
携帯電話機
Firefox
プログラミング言語
Opera
iPhone 3G
開発環境
話題のタグを見る »
#1 uchima
- 2008/07/24 09:37:29
#2
#3
アップルの注目特許10件--未来の製品を占う
フォトレポート:分解、「Apple IIc」第2弾--モニタの内部に迫る
ボックスレイアウトの方向をコントロールする