前端近期小结

1.有一种很方便的深克隆方式,不需要写方法去递归。

let a = {
  a1:[1,2,3],
  a2:'string',
  a3:{
    name:'jack',
    age:22
  }
}

let b=JSON.parse(JSON.stringify(a)) //深克隆
let c = {...a} //浅克隆

先转换成字符串重新开辟新的栈空间,然后再转换成对象即可,但是这种方式不可以转换内部有方法,日期,正则表达式的对象。

2.形参和实参的区别

var a = 1;

function func(b) {  // 这里是函数定义,`b`就是形参
    alert(b);
}

func(a);  // 这里是函数调用`a`就是实参

实参(argument):
全称为"实际参数"是在调用时传递给函数的参数. 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。

形参(parameter):
全称为"形式参数" 由于它不是实际存在变量,所以又称虚拟变量。是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.在调用函数时,实参将赋值给形参。因而,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值。

3.一道面试题

考点1:浏览器页面加载时会生成执行栈,每一个函数执行时会把它的执行上下文压缩到栈内存里,函数都是引用内存,都放在堆里,每个堆都有一个16进制的地址。对象堆里存的是键值对,函数堆里存的是函数的字符串。
考点2:a++,先运算再自加,++a:先自加再运算。

let a =1,b=2;
console.log(a++) //1
console.log(a+b++) //4
console.log(a+(++b)) //6
前端近期小结_第1张图片
微信截图_20210201224847.png

事件队列面试题

前端近期小结_第2张图片
微信截图_20210202211216.png

详见阮一峰老师的 http://www.ruanyifeng.com/blog/2015/05/async.html
async返回一个promise,等待await里面的函数执行完毕后,再执行await后面的函数。如果await里面是异步函数也会等待其执行完毕,跳出async执行别的微任务,然后再回来执行await后面的函数。如果await里面是普通同步函数,则会立即执行。

console.log('script start')

async function async1() {
    await async2()
    console.log('async1 end')
}
async function async2() {
    console.log('async2 end')
    return Promise.resolve().then(()=>{
        console.log('async2 end1')
    })
}
async1()

setTimeout(function() {
    console.log('setTimeout')
}, 0)

new Promise(resolve => {
    console.log('Promise')
    resolve()
})
.then(function() {
    console.log('promise1')
})
.then(function() {
    console.log('promise2')
})
//script start => async2 end => Promise => script end => async2 end1 => promise1 => promise2 => async1 end => setTimeout

此时执行完awit并不先把await后面的代码注册到微任务队列中去,而是执行完await之后,直接跳出async1函数,执行其他代码。然后遇到promise的时候,把promise.then注册为微任务。其他代码执行完毕后,需要回到async1函数去执行剩下的代码,然后把await后面的代码注册到微任务队列当中,注意此时微任务队列中是有之前注册的微任务的。所以这种情况会先执行async1函数之外的微任务(promise1,promise2),然后才执行async1内注册的微任务(async1 end). 可以理解为,这种情况下,await 后面的代码会在本轮循环的最后被执行.

浏览器输入网址发生了什么:

https://mp.weixin.qq.com/s?__biz=MzI0MzIyMDM5Ng%3D%3D&chksm=f175eea7c60267b1b5b91e527dcdf81027f2f36c97cb1837b13ffbb5a1699e013a77f84d1d16&idx=1&mid=2649826404&scene=21&sn=e4ccac5fe9d96b26ca1d8d347276d2b1#wechat_redirect

前端近期小结_第3张图片
微信截图_20210208162612.png

前端近期小结_第4张图片
微信截图_20210208162627.png

有关浏览器相关知识,强缓存,协商缓存等等,必看

301,302,303重定向,304和重定向无关
https://mp.weixin.qq.com/s?__biz=MzI0MzIyMDM5Ng==&mid=2649825731&idx=1&sn=2c0835cebfee3a44e82d9efeb54f6e43&chksm=f175eb00c602621649fd46d7c9de87f7f08a4cdaa9e08808b938948584ca6977e24a5f5336ce&scene=21#wechat_redirect

你可能感兴趣的:(前端近期小结)