Um internautas fez uma pergunta, conforme mostrado no seguinte HTML, por que cada saída é 5, em vez de clicar em cada p, você alertará os correspondentes 1, 2, 3, 4, 5.
<html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"/> <title> fechamento de demonstração </itit> <script type = "text/javascript"> function init () {var pey = document.getElementElementsbyTagName "; for (var i = 0; i <pary.length; i ++) {pary [i] .OnClick = function () {alert (i); }}} </script> </adhead> <corpo onLload = "init ();"> <p> Produto 1 </p> <p> Produto 2 </p> <p> Produto 3 </p> <p> Produto 4 </p> <p> Produto 5 </p> </body> </html>Existem várias soluções
1. Salve a variável i em cada objeto de parágrafo (P)
function init () {var pary = document.getElementsByTagName ("p"); for (var i = 0; i <pary.length; i ++) {pary [i] .i = i; pary [i] .OnClick = function () {alert (this.i); }}}2. Salve a variável i na própria função anônima
function init2 () {var pary = document.getElementsByTagName ("p"); for (var i = 0; i <pary.length; i ++) {(pary [i] .OnClick = function () {alert (argumentos.callee.i);}). i = i; }}3. Adicione uma camada de fechamento e eu é passado para a função interna na forma de parâmetros de função.
função init3 () {var pary = document.getElementsByTagName ("p"); for (var i = 0; i <pary.length; i ++) {(function (arg) {pary [i] .OnClick = function () {alert (arg);};}) (i); // argumentos quando chamam}}}}4. Adicione uma camada de fechamento e eu é passado para a função de memória na forma de uma variável local
função init4 () {var pary = document.getElementsByTagName ("p"); for (var i = 0; i <pary.length; i ++) {(function () {var temp = i; // pary local variável [i] .OnClick = function () {alert (temp);}}}) (); }}5. Adicione uma camada de fechamento e retorne uma função como um evento de resposta (observe a diferença sutil de 3)
function init5 () {var pary = document.getElementsByTagName ("p"); for (var i = 0; i <pary.length; i ++) {pary [i] .OnClick = function (arg) {return function () {// retorna um alerta de função (arg); } }(eu); }}6. Implementado com função, de fato, toda vez que uma instância de função é gerada, um fechamento será gerado.
function init6 () {var pary = document.getElementsByTagName ("p"); for (var i = 0; i <pary.length; i ++) {pary [i] .OnClick = new function ("alert (" + i + ");"); // new gera uma instância de função por vez}}}}}}}}7. Use a função para implementá -la, preste atenção à diferença entre 6
function init7 () {var pary = document.getElementsByTagName ("p"); for (var i = 0; i <pary.length; i ++) {pary [i] .OnClick = function ('alert ('+i+')')}}O exposto acima é a breve discussão sobre o JavaScript para o fechamento do loop que o editor traz para você. Espero que todos apoiem mais wulin.com ~