01函数节流
①什么是函数节流?
某些代码不可以在没有间断的情况连续重复执行
②为什么要实现函数节流?
防止用户随意操作,导致程序运行缓慢(DOM操作比起非DOM交互,需要更多的内存和CPU时间,连续尝试过多的DOM操作可能会导致浏览器挂起,甚至崩溃)
③如何实现函数节流?
使用单词定时器可以实现函数节流(第一次调用函数,创建一个定时器,在指定的时间间隔后运行代码;当第二次调用该函数的时候,它会清除前一次的定时器并设置另外一个)
02事件委托
①什么是事件委托?
事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作;
【什么是事件冒泡?
1.事件冒泡,就是元素自身的事件被触发后,如果父元素有相同的事件,如onclick事件,那么元素本身的触发状态就会传递,也就是冒到父元素,父元素的相同事件也会一级一级根据嵌套关系向外触发,直到document/window,冒泡过程结束。】
【如何阻止事件冒泡?
1.防止冒泡和捕获:e.stopPropagation();
2.取消默认事件:e.preventDefault();
3.阻止冒泡:return false】
②为什么要事件委托?
1.事件委托首先可以极大减少事件绑定次数,提高性能;
2.其次可以让新加入的子元素也可以拥有相同的操作。
③如何实现事件委托?
如果使用被注释掉的for循环里的代码(16~20行),只能删除原来已有的标签,却不能删除后面添加的标签
03作用域和作用域链
作用域:在js中只有函数的作用域,有了es6以后,可以有块级作用域的概念;
作用域链:使用变量的时候,会首先向上寻找距离该变量最近的作用域。如果有对应的变量,直接使用,否则向上寻找
04变量在内存中的存储
基本数据类型:在内存中以值得形式存储【栈】
复合类型对象:地址的形式存储 【栈–>堆(地址)】