- //觉得好像差不多可以成功的一个例子,出来的效果是点击,弹出的都是5.
- function addLinks () {
- for (var i=0, link; i<5; i++) {
- link = document.createElement("a");
- link.innerHTML = "Link " + i;
- link.onclick = function () {
- alert(i);
- };
- document.body.appendChild(link);
- }
- }
- window.onload = addLinks;
- //-下面这个是正确的实现
- function addLinks () {
- for (var i=0, link; i<5; i++) {
- link = document.createElement("a");
- link.innerHTML = "Link " + i;
- link.onclick = function (num) {
- return function () {
- alert(num);
- };
- }(i);//!!!!!!!!!!!!!注意这里
- document.body.appendChild(link);
- }
- }
- window.onload = addLinks;
以上的例子,告诉我们1个事实:
对于绑定了事件响应的那些function,在绑定的时候,并没有执行到里面去。所以必须在绑定的时候,就把参数传进去,用到的是self-invoking的funciton,即在定义的时候已经填好参数准备调用了。如上面的注释那块。
对于绑定了事件响应的那些function,在绑定的时候,并没有执行到里面去。所以必须在绑定的时候,就把参数传进去,用到的是self-invoking的funciton,即在定义的时候已经填好参数准备调用了。如上面的注释那块。