是什么
一句话:闭包是指有权访问另一个函数作用域中变量的函数
使一个函数能访问另一个函数作用域中的变量
闭包优缺点
-
使用闭包的优点是可以避免全局变 量污染,延长变量生命周期。
-
缺点是由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在低版本IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
防抖和节流,以及应用场景
简述:
(1)防抖:就是将一段时间内连续的多次只会执行最后一次触发。
(2)节流:减少一段时间内触发的频率
场景:
防抖:earch搜索联想,用户在不断输入值时或者登录时点击按钮
节流:鼠标拖拽
柯里化
柯里化是一个函数,它一次接受一个参数,并返回一个新函数,该函数期待下一个参数,利用闭包的原理。它是一种函数转换,将 f(a,b,c) 转换为可以被以 f(a)(b)(c) 的形式进行调用。
优点:
-
可以把函数式编程变得简洁,没有冗余。
-
可以将函数作为返回值输出,提前返回。
纯函数
1.返回值只和函数参数有关,与外部无关。无论外部发生什么样的变化,函数的返回值都不会改变
2.函数内部创建的变量。进行修改则不会产生副作用
总结:简单的说就是一个函数的返回结果只依赖其参数,并且执行过程中没有副作用。
作用域
所谓作用域就是变量可作用的范围
作用域链
在函数嵌套下,由内向外的链式规则就叫作用域链
事件轮询(Event Loop)
-
JS是单线程的,即同一时间只能执行一个任务
-
在JS中,任务分为同步任务和异步任务
-
同步任务:在主线程上执行的,形成一个执行栈,前一个任务执行完后执行后一个任务
-
比如for循环,事件绑定,Dom...
-
-
异步任务:通过回调函数实现在做任务的同时还能做其他任务
-
比如定时器的回调,ajax的回调,事件函数
-
-
-
异步任务又分为宏任务和微任务
-
宏任务:setTimeout,setInterval,ajax,dom事件监听...
-
微任务:promise,.then,async/await...
执行过程
-
优先执行同步任务,遇到异步任务推入任务队列中,等同步任务执行完再执行任务队列中的异步任务,异步任务中又分宏任务和微任务,先执行微任务,再执行宏任务
-
-
Ajax原理是什么?实现步骤?
通过 XmlHttpRequest 对象来向服务器发异步请求,从服务器获得数据,然后⽤ JavaScript 来操作 DOM ⽽更新⻚⾯。
步骤:
-
创建XMLHttpRequest对象,即创建一个异步调用对象.
-
创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息.
-
设置响应HTTP请求状态变化的函数.
-
发送HTTP请求.
-
获取异步调用返回的数据.