[javascript] Q. 変数の宣言したい

A.
JavaScriptで変数を宣言するには var キーワードを使います。
var 識別子;
複数の値を一度に宣言するにはカンマ(,)で区切ります。
var 識別子, 識別子, 識別子;
変数を宣言して、その変数に代入を行ってみます。
var a;
a = "A";
変数の宣言と代入を同時に行ってみます。
var a = "A";
b = "B";
varを付けないで変数を宣言しない場合は厳密には違いがあります。
その違いを確認してみます。

まずは、宣言した変数がどの段階で利用できるようになるのか確認しましょう。

varを付けて宣言した場合
console.log(a); // undefined
var a = "A";
console.log(a); // A
宣言より前で利用できる状態になっています。
これは、varで宣言された場合変数はプログラムが実行される前の段階で
Globalオブジェクトのプロパティに値はundefinedで設定されるからです。

var無し宣言した場合
console.log(a); // ReferenceError: Can't find variable: a
a = "A";
代入の実行段階でGlobalオブジェクトのプロパティに設定するという
意味になるので、実行以前に呼び出すとエラーが発生します。

varで宣言した変数はdeleteできない
var a = "A";
b = "B";
console.log( delete a ); // false
console.log( delete b ); // true
varで宣言した変数はECMAScript3実装の用語で表すと内部属性のDontDelete属性で
Globalオブジェクトのプロパティに設定されます。
この属性が設定されているプロパティは削除する事ができないので
deleteがfalseになります。

ECMAScript5では、オブジェクトの属性が変更できるようになりました。
ECMAScript3のDontDelete属性は、ECMAScript5 Configurableという属性 で表されています。
実際にvarをつけた場合と無しの場合の値を確認してみましょう。
var a = "A";
b = "B";
console.log( Object.getOwnPropertyDescriptor(this, "a") );
console.log( Object.getOwnPropertyDescriptor(this, "b") );
console.log( delete a ); // false
console.log( delete b ); // true
実行結果
js_val_1.png
varを付けた宣言の場合は configurableがfalseになっているのが
確認できます。falseの場合はプロパティの削除はできません。

参考サイト
ECMA-262-5 in detail. Chapter 1. Properties and Property Descriptors.
ECMA-262-3 in detail. Chapter 2. Variable object.
MDN getOwnPropertyDescriptor