递归函数
递归函数:函数内部直接或者间接的调用自己
递归的要求:
- 自己调用自己(直接或者间接)
- 要有结束条件(出口)
- 递归函数主要是化归思想 ,将一个复杂的问题简单化,主要用于解决数学中的一些问题居多。
把要解决的问题,归结为已经解决的问题上。
一定要考虑什么时候结束让函数结束,也就是停止递归(一定要有已知条件)
应用:获取按钮下标的两种方式
由于点击事件是异步的,当点击按钮的时候for循环早就执行完了,i也自增完毕,此前只是循环了10次函数声明,所以点击按钮每个函数里的i永远指向同一个全局i,值是10.
<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<button>按钮4</button>
<button>按钮5</button>
<button>按钮6</button>
<button>按钮7</button>
<button>按钮8</button>
<button>按钮9</button>
<button>按钮10</button>
// 获取按钮下标
var buttons = document.querySelectorAll("button")
// 方式一:
// 为对象添加index属性保存下标
// for (var i = 0; i < buttons.length; i++) {
// buttons[i].index = i
// buttons[i].onclick = function () {
// // console.log("ok");
// console.log(this.index);
// }
// }
// 方式二:
// 闭包
for (var i = 0; i < buttons.length; i++) {
(function (index) {
buttons[i].onclick = function () {
// console.log("ok");
console.log(index);
}
})(i)
}