ホームページ >ウェブフロントエンド >jsチュートリアル >一般的なクロージャの問題に対する JavaScript の解決策_JavaScript スキル

一般的なクロージャの問題に対する JavaScript の解決策_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:42:291135ブラウズ


[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、それを実行するために更新する必要があります
]

上記のコードは、各 div にイベントを追加するたびに使用されることを目的としています。つまり、div をクリックすると、対応する div のシリアル番号が表示されます。しかし、プログラムを実行すると、どれをクリックしても 7 しか表示されないことがわかります。これはなぜでしょうか。 --これがクロージャの問題です
jsでは関数内で関数を定義する際にクロージャが現れることが分かりました。このとき、外側の関数が終了しても、外側の関数内の変数は内側の関数でも使用できます。ただし、外層でループが発生した場合、内層の関数でループ変数を使用すると、この変数の最終値が直接参照されます。
上記のコードが示すとおりです。
それを解決する方法。
この問題を解決するには、匿名関数を使用できます。匿名関数は実行にブレーキをかけます。この機能を使用してスコープを作成し、変数をアクティブにして外側のループ変数を参照できます。
コードに示すように:

[Ctrl A すべて選択 注:
外部 Js を導入する必要がある場合は、
を実行するために更新する必要があります]

それは内部関数内にあります。ループ変数が出現する限り、最終値を持つことになります。そのため、内部ループに入る前に、別の変数がループ変数の値を取得するために無名関数を使用します。クロージャ問題に対処するための本質です。
次の例: 現時点では明らかな for ループはありませんが、上記の考え方に従って、問題はすぐに解決できます
[Ctrl A すべて選択 注:
外部 Js を導入する必要がある場合は、それを実行するために更新する必要があります
]

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

补充:看到有网友这样解决了问题:

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

我个人的理解是 在进入内层循环之前 把id赋值给f,f在作为内层循环的参数,其思想应该是一样的.
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。