JavaScript之我是递归

46 阅读2分钟

1、递归:函数内再次调用了函数自己,但迟早有一天会停下来

何时:专门用于遍历层级不明确的DOM或数据 如何:

    function 函数名(形参){
        1、第一层要做什么直接走

        2、判断有没有下一层,如果有再次调用此方法,只不过传入的实参是自己的下一层
	}
	函数名(实际的根元素/根数据)`

缺点:同时开启大量的函数调用,消耗内存

`

2、绑定事件的新方式:

主流:elem.addEventListener("事件名",callback);

老IE:elem.attachEvent("on事件名",callback);

兼容: if(elem.addEventListener){ elem.addEventListener("事件名",callback); }else{ elem.attachEvent("on事件名",callback); }

day05

1、event:事件对象 - BOM的最重要的一个对象:

1、事件周期:3个

1、捕获阶段:由外向内,记录着要发生的事件有哪些

2、目标优先触发:目标元素->实际发生事件的元素

3、冒泡触发:由内向外,依次执行记录着的事件

2、获取事件对象event:

	主流:事件函数的第一个形参会自动接住event对象
	老IE:event;
	兼容:event;

	获取到事件对象event可以做5个操作:
		1、阻止冒泡:
			主流:e.stopPropagation();
			老IE:e.cancelBubble=true;
			兼容:e.cancelBubble=true;

		2、事件委托/利用冒泡:绑定的事件越多,创建的事件对象就会越多,网页的性能就会越低下,把事件委托在父元素身上一次即可
			父元素.on事件名=e=>{
				目标元素:
				主流:e.target; -> 代替掉了this,甚至可以搭配上nodeName判断标签->返回的是一个全大写组成的标签名
				老IE:e.srcElement;
				兼容:e.srcElement;
			}

		3、阻止浏览器的默认行为:
			主流:e.preventDefault();
			老IE:e.returnValue=false;
			兼容:e.returnValue=false;
			新接触到的事件:
				右键:window.oncontextmenu
				键盘:window.onkeydown/press/up

		4、获取键盘的键码:
			e.keyCode;

		5、获取鼠标的位置:
			获取相对于屏幕的坐标:e.screenX/Y
			获取相对于文档显示区域的坐标:e.clientX/Y
			获取相对于页面的坐标:e.pageX/Y