宿迁网站建设托管,深入解析wordpress二手,做网站的外包公司,涿州市建设局网站作用域和作用域链的理解
作用域
#xff08;1#xff09;全局作用域
最外层函数和最外层函数外面定义的变量拥有全局作用域所有未定义直接赋值的变量自动声明为全局作用域所有window对象的属性拥有全局作用域全局作用域有很大的弊端#xff0c;过多的全局作用域变量会污染…作用域和作用域链的理解
作用域
1全局作用域
最外层函数和最外层函数外面定义的变量拥有全局作用域所有未定义直接赋值的变量自动声明为全局作用域所有window对象的属性拥有全局作用域全局作用域有很大的弊端过多的全局作用域变量会污染全局命名空间容易引起命名冲突。
2函数作用域
函数作用域声明在函数内部的变零一般只有固定的代码片段可以访问到作用域是分层的内层作用域可以访问外层作用域反之不行
3块级作用域
使用ES6中新增的let和const指令可以声明块级作用域块级作用域可以在函数中创建也可以在一个代码块中的创建由{ }包裹的代码片段let和const声明的变量不会有变量提升也不可以重复声明在循环中比较适合绑定块级作用域这样就可以把声明的计数器变量限制在循环内部。
作用域链
在当前作用域中查找所需变量但是该作用域没有这个变量那这个变量就是自由变量。如果在自己作用域找不到该变量就去父级作用域查找依次向上级作用域查找直到访问到window对象就被终止这一层层的关系就是作用域链。
作用域链有一个非常重要的特性那就是作用域中的值是在函数创建的时候就已经被存储了是静态的。
防抖和节流
我们在平时开发的时候会有很多场景会频繁触发事件比如说搜索框实时发请求onmousemove、resize、onscroll 等有些时候我们并不能或者不想频繁触发事件这时候就应该用到函数防抖和函数节流。
函数防抖(debounce)指的是短时间内多次触发同一事件只执行最后一次或者只执行最开始的一次中间的不执行。
函数节流(throttle)指连续触发事件但是在 n 秒中只执行一次函数。即 2n 秒内执行 2 次... 。节流如字面意思会稀释函数的执行频率。
区别在于防抖动是将多次执行变为最后一次执行节流是将多次执行变成每隔一段时间执行
宏任务和微任务
常见的宏任务有setTimeout、setInterval、requestAnimationFrame、script等。常见的微任务有new Promise( ).then(回调)、MutationObserver 等。
宏任务和微任务的执行流程总结起来就是
js在调用时优先取出微任务并且在执行过程中如果创建了新的作业则放在本次执行完后紧接着调用微任务执行完成后再取出宏任务执行 哪些情况会导致内存泄漏
以下四种情况会造成内存的泄漏
意外的全局变量 由于使用未声明的变量而意外的创建了一个全局变量而使这个变量一直留在内存中无法被回收。被遗忘的计时器或回调函数 设置了 setInterval 定时器而忘记取消它如果循环函数有对外部变量的引用的话那么这个变量会被一直留在内存中而无法被回收。脱离 DOM 的引用 获取一个 DOM 元素的引用而后面这个元素被删除由于一直保留了对这个元素的引用所以它也无法被回收。闭包 不合理的使用闭包从而导致某些变量一直被留在内存当中。