Core07 递归、绑定事件

59 阅读2分钟

递归:

简单来说就是再函数之中再一次调用了函数自己
何时使用:专门用于【遍历层级不明确的情况】 - DOM树和【数据】
如何使用:2步
    function 函数名(root){
    1、第一层要做什么直接做!
    2、判断有没有下一层,如果有下一层则再次调用此方法,只不过传入的实参是自己的下一层
    }
      函数名(实际的根元素/根数据)

	算法:深度优先!优先遍历当前节点的子节点,子节点遍历完毕才会跳到兄弟节点
	缺陷:不要过多使用,性能相对较差,同时开启大量的函数调用,浪费内存,我们
        只在一个情况使用:【遍历层级不明确的情况】

	递归 vs 纯循环:
            递归:优点:简单易用
                  缺点:性能低
            纯循环:优点:几乎不占用内存
                    缺点:难度大

绑定事件:3种方式

    1、在HTML页面上书写事件属性:
        <elem on事件名="函数名(实参)"></elem>
            缺点:
                1、不符合内容(HTML)与样式(CSS)与行为(JS)的分离
                2、无法动态绑定,一次只能绑定一个元素
                3、不支持绑定多个函数对象
    2、在JS中使用事件处理函数属性:
        elem.on事件名=function(){操作}
            优点:
                1、符合内容(HTML)与样式(CSS)与行为(JS)的分离
                2、可以动态绑定
            缺点:
                1、不支持绑定多个函数对象 - 我个人觉得这其实不是缺点
    3、在js中使用事件API:如果不用考虑老IE,他还是不错的
        主流:elem.addEventListener("事件名",callback);··
        老IE:elem.attachEvent("on事件名",callback);
        兼容:
            if(elem.addEventListener){
                elem.addEventListener("事件名",callback);
            }else{
                elem.attachEvent("on事件名",callback);
    }
    优点:
        1、符合内容(HTML)与样式(CSS)与行为(JS)的分离
        2、动态绑定
        3、支持绑定多个函数对象
    缺点:有兼容性问题
扩展:
    1、select\&option只要他们可以简化创建元素&上树!
    一句话简化4个操作:
    例:
    cities[i].forEach(obj=>{
    var opt = document.createElement("option")
    opt.innerHTML=obj.name;
    opt.value=obj.value;
    sels[1].appendChild(opt)
    })
    简化:
    select.add(new Option("innerHTML","value"))