javascriptのリアルゲーム投稿サイト -sightlasの開発ブログ

sightlasの開発ブログと称して、全然関係のない(?)技術論や日常の出来事を書きます。

JavaScriptは、同じ名前の変数と関数が同じスコープにあった場合、常に変数が優先される

テストをしていて疑問に思ったのでメモ。

次のコードのようにJavaScriptでは、同じ名前の変数と関数を同じスコープに書くことができます。
スコープが違う場合、最も近いスコープにある変数や関数が使われますが、同じスコープに同じ変数と関数がある場合はどうなのだろうと、テストしてみた。

 

コード:
    var a = 1;
    function a(){
    }
    console.log("a:" + a);

 

    function b(){

        var b = 1;
        console.log("b:" + b);
    }
    b();

 

    (function(){

        var c = 1;

        function c(){
        }
        console.log("c:" + c);
    })();

 

結果:

同じスコープだと、常に変数が優先されます。

定義された関数が意味不明の値になる場合は、同じ名前の変数が間違って定義されていないか要チェックですね。

 

chrome50.0

f:id:sightlas:20160524163030p:plain

 

internet exproler:11

f:id:sightlas:20160524163049p:plain

 

firefox:45.0

f:id:sightlas:20160524163044p:plain