既然有涉及,即_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;爲(酒吧在Foo)/ * ... * /'而不是:^) – rjz