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
![](https://img.haomeiwen.com/i14081875/185d53c89ed6cd7e.png)
事件队列面试题
![](https://img.haomeiwen.com/i14081875/4fea1be96ee5c073.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://img.haomeiwen.com/i14081875/fb6a775fe0fa44fa.png)
![](https://img.haomeiwen.com/i14081875/ec71b9f259e97eca.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
网友评论