せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【JavaScript 】変数のスコープ。

 
■topic summary
study about scope in JavaScript

 
きたよー。
(悪)名高きJavaScript スコープの概念!

お断り

記載しているp関数は以下の通りです

var p = function(obj){console.log(obj)};


 

varをつける理由

varをつけるとその関数内だけで有効な変数となる。
つまり、関数外の変数(グローバル変数)には
varをつけてもつけなくても挙動は同じ(だと思う)。
統一のために、すべてにvarをつけることが推奨されているみたい。


 

変数のスコープは「関数全域」

var x=1;
function f(){
 p(x);
 var x=10;
 p(x);
}
f();

■実行結果

undefined
10

 
この理由は、こう書き直したら納得。

function f(){
 var x;
 p(x);
 x=10;
 p(x);
}

 
じゃあこれは?

var p = function(obj){console.log(obj)};
var x=1;
function f(){
 p(x);
 x=10;
 p(x);
}
f();

 
■実行結果

1
10

変数の再宣言ではなく、
単にグローバル変数に再代入しているだけだから。

 

入れ子関数のスコープ

function f1(){
 var x=1;
 function f2(){
  p(x);
  var x=10;
  p(x);
 }
 f2();
}
f1();

■実行結果

undefined
10