0

これはどれほど迷惑ですか?http://jsfiddle.net/b3xyx/

  • addEventListener を使用して、各リンクに JavaScript 関数を割り当てています。
  • ループは各リンクを反復し、インクリメントされた変数 x を割り当てます
  • しかし、実際にはリンクをクリックすると、x の値を警告する代わりに、x の最終値を警告します。つまり、x をコピーするのではなく、ポインタを x に割り当てただけです。
  • ここで動作を確認してください: http://jsfiddle.net/b3xyx/リンクのいずれかをクリックすると、「4」が警告されます。ぐら。

        function goToSite(where){
            alert("This would take you to " + where + ".com")
        }
    
        for(var x=1; x<=3; x++){
            document.getElementById('link'+x).addEventListener('click', function(){goToSite(x)})
        }
    

どうすればこれを回避できますか? この場合、変数の真のコピーを作成する方法はありますか?


編集:重複を提案していただきありがとうございますが、重複していないようです。

http://jsfiddle.net/aERRE/

^ 私の更新されたコード:

function goToSite(whichOne){
    return function(){
        alert("This would take you to " + whichOne + ".com");
    }
}

それでもうまくいきません。

4

1 に答える 1

0

in javascript, the for(var x...) transforms,the var x is moved to the begin of the function. and therefor the x in the goToSite refers to the global x you increased in each iteration, read about closures to understand why it happens...

于 2013-02-10T22:43:03.423 に答える