「Javascript: The Good Parts」の本でクロージャーについて読んでいます。
クロージャーを使用する次の例があります。
var add_the_handlers = function (nodes) {
var i;
   for (i = 0; i < nodes.length; i += 1) {
      nodes[i].onclick = function (i) {
         return function (e) {
            alert(i + ":" + e);
         };
      }(i);
   }
};
正しい例ですか?または、多くの正しい例は次のようになりますか?
var add_the_handlers = function (nodes) {
var i;
   for (i = 0; i < nodes.length; i += 1) {
      nodes[i].onclick = function (idx) {
         return function (e) {
            alert(idx + ":" + e);
         };
      }(i);
   }
};
外部関数の変数 i と内部関数の変数 i "nodes[i].onclick = function (i)" - 2 つの異なる変数です。そして、3 番目の関数は、最も外側からではなく、2 番目の関数から変数にアクセスします。
私は正しいですか?