私は可変スコープの問題を抱えていますが、なぜこれが発生するのか、そしてそれを取り除く方法がわかりません:
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」)がエコーされますが、セレクターとそれに続くアイテム名はバーに関連しています。問題は、ループの2回目の反復で、最初の反復で使用された変数がリセットされることだと思います。
ループ内の宣言は、このレベルでスコープを明確に宣言する必要があると思いました。私が間違っている ?なんで ?どうすれば修正できますか?
私は回避策を求めていません。何かクリーンで、javascript変数スコープのメカニズムをよりよく理解したいと思っています。
ここにjsfiddleがあります。
ありがとう !