目录
二.介绍下Set,Map,WeakSet和WeakMap的区别
三.setTimeout,Promise,Async/Await的区别
九.JavaScript中的数组和函数在内存中是如何存储的?
我们在平时开发的时候,会有很多场景频繁触发事件,比如说搜索框实时发请求,onmousemove,resize,onscroll等,有些时候,我们并不能或者不想频繁触发事件,这时候就应该用到函数防抖和节流。
函数防抖,指的是短时间内多次触发同一事件,只执行最后一次,或者只执行最开始的一次,中间的不执行。
具体实现:
?
//函数防抖
function debounce(func,wait){
//设置变量,记录setTimeout得到的id
let timerId=null;
return function(...args){
if(timerId){
//如果有值,说明正在等待中,清除它
clearTimeout(timerId);
}
//重新开始计时
timerId=setTimeout(()=>{
func(..args);
},wait);
}
}
函数节流,指连续触发事件但是在n秒中只执行一次函数。即2n秒内执行两次。节流如字面意思,会稀释函数的执行频率。
具体实现如下:
//函数节流
function throttle(func,watit){
let context,args;
let provious=0;
return function () {
let now = new Date();
context=this;
args=arguments
if(now-provious>wait){
func.app(contxt,args)
provious=now;
}
}
}
Set:
WeakSet:
Map:
WeakMap:
事件循环中分为宏任务队列和微任务队列。
其中setTimeout的回调函数放到宏任务队列里,等到执行栈情况以后执行;
promise.then里面的回调函数会放到宏任务的微任务队列里,等宏任务里面的同步代码执行完再执行;
async函数表示函数里面可能会有异步方法,await后面跟一个表达式,async方法执行时,遇到await会立即执行表达式,然后把表达式后面的代码放到微任务队列里,让出执行栈让同步代码先执行。
同步意味着每一个操作必须等待前一个操作完成后才能执行。
异步意味着操作不需要等待其他操作完成后才开始执行。
在JavaScript中,由于单线程的特性导致所有代码都是同步的。但是,有些异步操作(例如:XMLHtttpRequest或setTimeout)并不是由主线程进行处理的,他们由本机代码所控制,并不属于程序的一部分。但程序中被执行回调部分依旧是同步的。
1)创建新节点
2)添加,移除,替换,插入
3) 查找
property和attribute是二个不同的东西,属于不同的范畴。
简单理解,Attribute就是dom节点自带的属性,例如html中常用的id,class,title,align等
而property是这个DOM元素作为对象,其附加的内容,例如childNodes,firstChild等。
在JavaScript中,数据类型整体上来讲可以分为两大类:基本数据类型和引用数据类型
基本数据类型,一个6种:
string,symbol,number,boolean,undefined,null
其中symbol类型是ES6里面新添加的基本数据类型
引用数据类型,就只有一种:
object
基本数据类型的值又被称之为原始值或简单值,而引用数据类型的值又被称之为复杂值或引用值
函数式编程和面向对象编程一样,是一种编程式范式。强调执行的过程中而非结果,通过一系列的嵌套的函数调用,完成一个运算过程。它主要有以下几个特点:
函数式编程的应用场景:
在JavaScript中,数组不是以一段连续的区域存储在内存中,而是一种哈希映射的形式存储在堆内存里面。它可以通过多种数据结构实现,其中一种是链表。
JavaScript中的函数是存储在堆内存中的,具体的步骤如下:
扩展运算符是三个点(...),主要用于展开数组,将一个数组转为参数序列。
扩展运算符使用场景: