我有一个变量范围问题,我不明白为什么会发生这种情况以及如何摆脱它:
var items = ['foo', 'bar'];
for (var index in items) {
var item = items[index];
var selector = '.'+item+'-class';
$(selector).bind('click', function() {
console.log("class: "+$(this).attr('class'));
console.log("selector: "+selector);
console.log("item: "+item);
});
}
认为此代码通过以下 HTML 自行执行:
<div class="foo-class">Foo</div>
<div class="bar-class">Bar</div>
单击“Foo”会在第一行回显正确的类(即“foo-class”),但选择器和后面的项目名称与 bar 相关。我认为问题在于循环的第二次迭代重置了第一次迭代中使用的变量。
我认为循环内部的声明应该在这个级别清楚地声明它们的范围。我错了吗 ?为什么 ?我该如何解决?
我不是在寻找解决方法,我想要一些干净的东西,更好地理解 javascript 变量范围机制。
这里是jsfiddle。
谢谢 !