闭包的概念
1、如何产生闭包?
当一个嵌套的内部子函数引用了嵌套的外部父函数的变量(函数)时,就产生了闭包。
2、闭包到底是什么?
3、产生闭包的条件是什么?
函数嵌套,内部函数引用了外部函数的数据(变量/函数)
业务需求:
点击按钮,显示点击的是第几个按钮。
代码如下:
// 需求:点击按钮,显示按钮顺序
var btns = document.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
var btn = btns[i];
btn.onclick = function() {
alert("点击第" + (i + 1) + "个按钮");
};
}
问题分析:
我们不难发现,对于你输出的结果都是以 i=4 输出的,并不是我们想要的结果。
问题解决:
遇见这种情况,我们可以使用闭包函数来解决。我们使用一个新的函数将外部的变量传给内部的函数即可。代码修改如下:
var btns = document.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
var btn = btns[i];
(function(k) {
btn.onclick = function() {
alert("点击第" + (k + 1) + "个按钮");
};
})(i);
}