]
上記のコードは、各 div にイベントを追加するたびに使用されることを目的としています。つまり、div をクリックすると、対応する div のシリアル番号が表示されます。しかし、プログラムを実行すると、どれをクリックしても 7 しか表示されないことがわかります。これはなぜでしょうか。 --これがクロージャの問題です
jsでは関数内で関数を定義する際にクロージャが現れることが分かりました。このとき、外側の関数が終了しても、外側の関数内の変数は内側の関数でも使用できます。ただし、外層でループが発生した場合、内層の関数でループ変数を使用すると、この変数の最終値が直接参照されます。
上記のコードが示すとおりです。
それを解決する方法。
この問題を解決するには、匿名関数を使用できます。匿名関数は実行にブレーキをかけます。この機能を使用してスコープを作成し、変数をアクティブにして外側のループ変数を参照できます。
コードに示すように:
外部 Js を導入する必要がある場合は、
を実行するために更新する必要があります]
それは内部関数内にあります。ループ変数が出現する限り、最終値を持つことになります。そのため、内部ループに入る前に、別の変数がループ変数の値を取得するために無名関数を使用します。クロージャ問題に対処するための本質です。
[Ctrl A すべて選択 注:
外部 Js を導入する必要がある場合は、それを実行するために更新する必要があります
]
补充:看到有网友这样解决了问题:
我个人的理解是 在进入内层循环之前 把id赋值给f,f在作为内层循环的参数,其思想应该是一样的.