这一种的方式比起自执行方式的优点在什么地方?
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>2-1</title> <style> /*补充代码*/ li{cursor:pointer;} </style> </head> <body> <li>0</li> <li>1</li> <li>2</li> <script> var li=document.getElementsByTagName("li"); for(var i=0,len=li.length;i<len;i++){ li[i].onclick = (function (j) { return function () { alert('这是第' + (j+1)+ '个li'); } })(i); } </script> </body> </html>
2
收起
正在回答
2回答
同学你好!
它们没有什么区别,只是应用场景不同。
(1)类似这种(function(i){li[i].onclick=function(){alert(i);}})(i)是匿名函数,仅在调用时,才临时创建函数对象和作用域链对象、
这里并不是一个完全的闭包,但是它有闭包的特点,例如闭包结构事函数嵌套一个函数,这里也是通过自执行匿名函数函数嵌套一个点击事件的匿名函数。然后自执行的匿名函数形成了一个作用域,通过for循环出来的i值传递给绑定事件的li元素,每循环一次,也会在作用域中保存了当前的i值。所以实现了每次的i值都保存下来了。
(2)而同学写这个函数是一个闭包函数。本质上,闭包是将函数内部和函数外部连接起来的桥梁。它的优点1:变量长期驻扎在内存中;2:避免全局变量的污染; 3:私有成员的存在;
使用闭包要特别注意一点 :常驻内存 会增大内存的使用量 使用不当会造成内存泄露,由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。
所以说应该根据引用场景去选择使用哪一种
如果帮助到了你 欢迎采纳 祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星