1.
document.body.innerHTML = "<div id='zbx1'>aaa</div>"
+ "<div id='zbx2'>bbb</div><div id='zbx3'>ccc</div>";
for(var i=1;i<4;i++){
console.log(i);
<span style="white-space:pre"> </span>document.getElementById('zbx'+ i).addEventListener('click',function(){
console.log(i)
});
}
以上这段代码希望的是每次点击页面上的id zbx1 zbx2 zbx3 第二个console.log的输出的i分别对应1 2 3;
但是输出的结果都是4,这是为什么呢?是应为 当页面加载的时候已经for循环已经循环过了,可以通过第一个console.log看出输出了1,2,3
那如何让第二个console.log的输出的i分别对应1 2 3;
通过闭包方式:
document.body.innerHTML = "<div id='zbx1'>aaa</div>"
+ "<div id='zbx2'>bbb</div><div id='zbx3'>ccc</div>";
for(var i=1;i<4;i++){
console.log(i)
!function (i){<pre name="code" class="javascript"><pre name="code" class="javascript"><pre name="code" class="javascript"> <span style="white-space:pre"> </span>console.log(i)
document.getElementById('zbx'+ i).addEventListener('click',function(){console.log(i)});
}(i);
}
通过一个立即执行的匿名函数,将每次for循环的值传进匿名函数中!function (i){}(i);
当每一次点击i就会取自匿名函数里闭包环境的i,i来源于每一次循环赋值的i。
2.
!function(){
var _userId = 23492;
var _typeId = "item";
var exportName = {};
function converter(userId){
return +userId;
}
exportName.getUserId = function(){
return converter(_userId);
}
exportName.getTypeId = function(){
return _typeId;
}
window.exportName = exportName;
}();
console.log("Id" + exportName.getUserId()) //Id23492
console.log(exportName.converter) //underfined
这篇文章写得很不错,从中悟到了一些!http://kb.cnblogs.com/page/110782/