JS示例:
<button>按钮一</button>
<bton>按钮二</button>
<button>按钮三</button>
<button>按钮四</button>
<script type="text/javascript">
var btns = document.querySelectorAll("button");
for(var i =0;i< btns.length;i++){
btns[i].onclick = function(){
alert(i);
}
}
</script>
上面这段代码是没有使用闭包函数,无论点击哪个按钮,显示的都是4,因为加载时,循环变量i最后的值是4,在绑定的时候,alert(i),并没有执行,所有i只是一个变量,只有在点击按钮时才会去取值,所以,取得到i变量的最后的值4,所以在这里就要用到闭包函数,下面是使用闭包函数后的JS代码
<button>按钮一</button>
<button>按钮二</button>
<button>按钮三</button>
<button>按钮四</button>
<script type="text/javascript">
var btns = document.querySelectorAll("button");
//闭包函数
function fun(index){
return function(){
alert(index);
}
}
for(var i =0;i< btns.length;i++){
/*btns[i].onclick = function(){
alert(i);
}*/
btns[i].onclick = fun(i);//执行fun函数,传入i变更
}
可以看到,当每循环一次时,都会调用一次fun()函数,并将i传入fun()函数并返回,就可以实现功能
我们有时要获取的变量值,由于种种不同的原因获取不到或者获取到的不是本来想要获取的值,因此只能通过一些其他的方法来实现,在函数内部再写一个函数,将变量传入并返回所需,从而获取该变量的值。由于在JS语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。主要的作用就是获取函数内部的变量
未完