技術的負債の仕事をしているときに、これに遭遇しました。変数のスコープはfoo
? それは本当に「すでに定義されている」のですか?
function fn(){
for (var i = 0; i < m.length; i++) {
if(condition)
for (var j = 0; j < m.length; j++) {
var foo = "bar";
}
else
var foo = "fubar"
}
}
更新: 問題は、条件付きブロック内で定義された変数の範囲に関するものです。これは関数/クロージャにネストされていないため、一意のスコープはありません。
説明するスニペットを次に示します。
var x = "foo",
a = [];
for(var i=0;i<10;i++){
var x = {value:1+i};
a.push(x)
}
document.write("<pre>" +
x.value + "\n" +
JSON.stringify(a,null," ") +
"</pre>"
);