一、 <!-- lang: html --> <!DOCTYPE HTML> <!-- lang: html --> <html> <!-- lang: html --> <head> <!-- lang: html --> <meta charset="utf-8" /> <!-- lang: html --> <title>閉包演示</title> <!-- lang: html --> <style type="text/css"> <!-- lang: html --> p {background:gold;} <!-- lang: html --> </style> <!-- lang: html -->javascript
<!-- lang: html --> <script> <!-- lang: html --> function init(){ <!-- lang: html --> var list=document.getElementsByTagName("p"); <!-- lang: html --> <!-- lang: html --> for (var i=0;i<list.length;i++){ <!-- lang: html --> <!-- lang: html --> list[i].onclick=function(){ <!-- lang: html --> var b=i; <!-- lang: html --> return function(){ <!-- lang: html --> alert(b); <!-- lang: html --> }; <!-- lang: html --> }(); <!-- lang: html --> } <!-- lang: html --> } <!-- lang: html --> <!-- lang: html --> </script> <!-- lang: html --> </head> <!-- lang: html --> <body onload="init();"> <!-- lang: html --> <p>產品 0</p> <!-- lang: html --> <p>產品 1</p> <!-- lang: html --> <p>產品 2</p> <!-- lang: html --> <p>產品 3</p> <!-- lang: html --> <p>產品 4</p> <!-- lang: html --> </body> <!-- lang: html --> </html>
以前是點擊任何一條出現的都是5,下面這樣寫就會有些問題css
<!-- lang: html --> <!DOCTYPE HTML> <!-- lang: html --> <html> <!-- lang: html --> <head> <!-- lang: html --> <meta charset="utf-8" /> <!-- lang: html --> <title>閉包演示</title> <!-- lang: html --> <style type="text/css"> <!-- lang: html --> p {background:gold;} <!-- lang: html --> </style> <!-- lang: html --> <script type="text/javascript"> <!-- lang: html --> function init() { <!-- lang: html --> var pAry = document.getElementsByTagName("p"); <!-- lang: html --> for( var i=0; i<pAry.length; i++ ) { <!-- lang: html --> pAry[i].onclick = function() { <!-- lang: html --> alert(i); <!-- lang: html --> } <!-- lang: html --> } <!-- lang: html --> } <!-- lang: html --> </script> <!-- lang: html --> </head> <!-- lang: html --> <body onload="init();"> <!-- lang: html --> <p>產品 0</p> <!-- lang: html --> <p>產品 1</p> <!-- lang: html --> <p>產品 2</p> <!-- lang: html --> <p>產品 3</p> <!-- lang: html --> <p>產品 4</p> <!-- lang: html --> </body> <!-- lang: html --> </html>
因此一方面新建變量b,返回一個引用,另外也應該return一個函數,若是不用return,循環執行的時候就會覆蓋前面的方法,最後獲得的仍是同一個引用。html