varなんて最近つかわないなぁ、勉強せんでいいだろうと思っていたのだけど… わかっているようでわかってなかった。
いろいろと基礎から勉強しなければな。
変数の宣言時に、varを使うか使わないかで結構違う:
違い1 - スコープ
var myVar = "foo"; function myFunction () { var myVar = "bar"; console.log(myVar); } myFunction(); console.log(myVar);
の結果は、
bar foo
→関数の中でvarを使って定義された変数はスコープがその関数になるから(=グローバルスコープのmyVarに影響しない)
myVar = "foo"; function myFunction () { myVar = "bar"; console.log(myVar); } myFunction(); console.log(myVar);
の結果は、
bar bar
違い2 - deleteの可否(Configurableプロパティの違い)
var myVar1 = "foo"; myVar2 = "Bar"; console.log(myVar1); console.log(myVar2); console.log(delete myVar1); // false console.log(delete myVar2); // true
varを使って宣言した変数は、Configurableプロパティがfalseのためdeleteで削除できない:
console.log(Object.getOwnPropertyDescriptor(this, "myVar1")); console.log(Object.getOwnPropertyDescriptor(this, "myVar2"));
の出力は:
{value: 'foo', writable: true, enumerable: true, configurable: false} {value: 'Bar', writable: true, enumerable: true, configurable: true}