ก่อนอื่นลองดูที่รหัส:
การคัดลอกรหัสมีดังนี้:
<a href = "JavaScript: void (0);"> 111 </a>
<a href = "JavaScript: void (0);"> 222 </a>
<a href = "javacsript: void (0);"> 333 </a>
var a = document.getElementsByTagname ("A");
ฟังก์ชั่น b () {
สำหรับ (var i = 0; i <a.length; i ++) {
a [i] .onclick = function () {
การแจ้งเตือน (i);
-
-
-
ตามความตั้งใจดั้งเดิมของการออกแบบของเราควรคลิกที่แท็ก A เพื่อปรากฏขึ้นหมายเลขซีเรียลที่สอดคล้องกันของแท็กนั่นคือคลิกที่ A แรกที่จะปรากฏขึ้น 0 และคลิกที่วินาทีที่จะปรากฏขึ้น 1 ... แต่ความจริงก็คือจำนวนแท็กที่ปรากฏขึ้นเสมอคือจำนวนแท็ก เหตุผลคืออะไร? ปัญหานี้ทำให้ฉันลำบากมานาน ฉันได้ปรึกษาวัสดุออนไลน์และหนังสืออ้างอิงมากมาย ส่วนใหญ่เป็นไปได้ ฉันเชื่อว่านักเรียนหลายคนไม่รู้จักเหตุผลมากนัก ฉันจะพูดถึงความเข้าใจในเรื่องนี้ หากมีความไม่เหมาะสมใด ๆ โปรดวิจารณ์และแก้ไขฉัน
ในความเข้าใจส่วนบุคคลของฉันเหตุผลที่ฟังก์ชั่นข้างต้นล้มเหลวในการบรรลุวัตถุประสงค์คือฟังก์ชั่นการประมวลผลเหตุการณ์เชื่อมโยงตัวแปร I และฟังก์ชั่นการประมวลผลเหตุการณ์ถูกกำหนดให้กับ OnClick นั่นคือฟังก์ชั่นจะถูกเรียกเมื่อคลิกแท็กเท่านั้น ดังนั้นการพูดอย่างมีเหตุผลฟังก์ชั่น () {แจ้งเตือน (i);} ในแบบง่ายสำหรับลูปไม่ได้ถูกดำเนินการจริงและเมื่อเราคลิกที่แท็ก A สำหรับการวนรอบได้ถูกดำเนินการแล้ว ในเวลานี้ค่าของฉันคือค่าสุดท้ายของการดำเนินการลูป เพื่อให้ง่ายค่าของฉันเป็นของฟังก์ชัน B และค่าของฉันที่เราต้องการคือค่าที่ส่งผ่านไปยังฟังก์ชั่นการประมวลผลเหตุการณ์แบบเรียลไทม์ มีวิธีใดที่จะตระหนักถึงความตั้งใจในการออกแบบดั้งเดิมของเรา? เพื่อนร่วมชั้นอัจฉริยะอาจเดาได้ว่าจะใช้การปิด
มาดูรหัสอื่น:
การคัดลอกรหัสมีดังนี้:
var a = document.getElementsByTagname ("A");
ฟังก์ชั่น b () {
สำหรับ (var i = 0; i <a.length; i ++) {
a [i] .onclick = function (j) {
return function () {
การแจ้งเตือน (J);
-
}(ฉัน);
-
-
B ();
ดำเนินการรหัสด้านบนและคุณจะพบว่าฟังก์ชั่นที่เราต้องการได้ถูกนำไปใช้นั่นคือการคลิกแท็กใด ๆ ที่จะปรากฏขึ้นเป็นหมายเลขซีเรียลที่แท็กอยู่ ฉันเชื่อว่านักเรียนหลายคนได้เห็นรหัสข้างต้นหลายรุ่นที่คล้ายกัน แต่ทำไมเราถึงบรรลุฟังก์ชั่นที่เราต้องการได้โดยการทำเช่นนี้? นี่คือความเห็นส่วนตัวของฉัน หากมีความไม่เหมาะสมใด ๆ โปรดให้คำแนะนำกับฉัน
สาระสำคัญของความเข้าใจเกี่ยวกับรหัสข้างต้นคือความเข้าใจของตัวแปร i ในรหัสนี้เมื่อฟังก์ชั่นถูกเรียกใช้งานและพบการวนรอบพบฟังก์ชันการโทรทันที ในเวลานี้ค่าตัวแปรเรียลไทม์จะถูกส่งผ่านไปยังฟังก์ชันการโทรทันที ฟังก์ชั่นนี้เรียกว่าทันทีและฟังก์ชั่นการประมวลผลเหตุการณ์จะจัดเก็บค่าตัวแปรเรียลไทม์ I
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อความเข้าใจของทุกคนเกี่ยวกับการปิด JS