标签:
假设也没有上有5个div节点,通过循环给每个div绑定onclick实现弹出对应的编号。代码如下:
<div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <script> var nodes=document.getElementsByTagName(‘div‘); for (var i=0,len=nodes.length;i<len;i++){ nodes[i].onclick=function () { alert(i+1); } }; </script>
运行后发现点击所有div都弹出6。原因是div节点onclick是异步触发的,触发的时候for循环早已结束,此时变量i的值是5。
解决办法就是采用闭包,修改下JS代码如下:
var nodes=document.getElementsByTagName(‘div‘); for (var i=0,len=nodes.length;i<len;i++){ (function (i) { nodes[i].onclick=function () { alert(i+1); } })(i) };
书上还有一个例子,Object.prototype.toString()判断某个对象值属于哪种内置类型。
for(var i=0,type;type=[‘String‘,‘Array‘,‘Number‘][i++];)这块语法不是特别懂。
var Type={} for(var i=0,type;type=[‘String‘,‘Array‘,‘Number‘][i++];){ (function (type) { Type[‘is‘+type]=function (obj) { var result= Object.prototype.toString.call(obj)===‘[object ‘+type+‘]‘; console.log(result); } })(type) }; Type.isArray([]);//输出true Type.isString(‘str‘);//输出true
《javascript设计模式与开放实践》学习(三)函数的闭包1
标签:
原文地址:http://www.cnblogs.com/GallopingSnail/p/5870106.html