1、递归:在函数中再一次调用函数自己
1、何时使用:专门遍历层级不明确的情况—DOM和数据children只能找到下一层找不到下下层
2、如何使用:2步
function 函数名(root){
1、第一层要做什么就直接做
2、判断有没有下一层,如果有下一层则再次调用此方法,只不过传入的实参是自己的下一层
}
函数名(实际的根)
3、算法:深度优先,优先遍历当前节点的子节点,子节点遍历完才跳到兄弟节点
缺陷:不要过多使用,性能差,同时开启大量的函数调用,浪费内存
问题:递归vs纯循环
递归:
优点:简单易用
缺点:性能低
纯循环:
优点:几乎一点都不占内存
缺点:不易懂
2、绑定事件:3种方式
1、在HTML上书写事件属性
<elem on事件名="函数名(实参)"></elem>
缺点:
1、不符合内容与样式与行为的分离原则
2、无法动态绑定,一次只能帮顶一个元素
3、不支持绑定函数对象
2、在js中使用事件处理函数属性
elem.on事件名=function(){操作}
优点:
1、符合内容与样式与行为的分离规则
2、动态绑定,一次能绑定多个元素
缺点:不支持绑定多个函数对象
3、在js中使用事件API
主流:elem.addEventListener("事件名",callback);
老IE:elem.attachEvent("on事件名",callback);
兼容:
if(elem.addEventListener){
elem.addEventListener("事件名",callback);
}eles{
elem.attachEvent("on事件名",callback);
}
优点:
1、符合内容与样式与行为的分离规则
2、动态绑定
3、支持绑定对各函数对象
缺点:有兼容性问题
扩展:select & option
只有他们可以简化创建元素和上树
select.add(new option("innerHTML"."value"));