Поскольку существуют две отдельные функции, а именно _GetFoo
и _CountBar
, не должна ли переменная bar
быть в другом объеме, даже если они оба используют ее? Если вы скопируете его, а затем запустите, он отобразит проблему с двумя предупреждениями.Почему эти переменные javascript используют общий объем?
<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
доля сферы?
Поскольку, не привязавшись к области видимости каждой функции, JS предполагает, что 'bar' прикрепляется к глобальной области видимости. Попробуйте 'var bar; для (bar в Foo)/* ... */'вместо: ^) – rjz