Javascript: var有りと無しの違い

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}