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);
})();
結果:
同じスコープだと、常に変数が優先されます。
定義された関数が意味不明の値になる場合は、同じ名前の変数が間違って定義されていないか要チェックですね。
chrome:50.0
internet exproler:11
firefox:45.0