関係する 2 つの別個の関数があるため、つまり_GetFoo
、両方が変数を使用しているにもかかわら_CountBar
ず、変数bar
を別のスコープにするべきではありませんか? これをコピーして貼り付けて実行すると、2 つのアラートで問題が表示されます。
<script type="text/javascript">
var example = function () {
var Foo = [];
function _BuildFoo(size) {
for (var buildSize = 0; buildSize < size; buildSize++) {
Foo.push(buildSize);
}
}
function _GetFoo(index) {
for (bar in Foo) {
//do Foo bar
}
}
function _CountBar() {
for (bar in Foo) {
alert(bar); //bar = 0
_GetFoo(1);
alert(bar); //bar is incremented from _GetFoo function and is now 19
break;
}
}
return {
_CountBar: _CountBar,
_BuildFoo: _BuildFoo
}
}
var foobar = new example();
foobar._BuildFoo(20);
foobar._CountBar();
</script>
_GetFoo
スコープを_CountBar
共有する理由