这一种的方式比起自执行方式的优点在什么地方?
<!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 星