目录
今日题
题目
const one = () => console.log(1)
const two = () => console.log(2)
const three = () => setTimeout(() => console.log(3))
one()
three()
two()
分析
考察输出顺序,典型的同步异步任务
昨日题
题目
var outer = {
name: '鲨鱼辣椒',
inner: {
name: '蟑螂恶霸'
}
}
var f = function ({name, inner}) {
name = '蝎子莱莱'
inner.name = '蜻蜓队长'
}
f(outer)
console.log(outer.name)
console.log(outer.inner.name)
答案
'鲨鱼辣椒','蜻蜓队长'
解析
退!退!退!在做这道题之前,先说个关于这道题答案的事情,反正就挺好玩的。昨天我在群里看群成员打卡每日一题,无意间我看到了一句话“这题最多四种不同答案,全给我整出来了”,我就往上翻了翻聊天记录,我在想,这题很难吗???好了,言归正传,我们来依次分析一下。outer对象中包含name属性、inner对象,而inner对象中又包含一个name属性。然后就是函数f,f的形参为解构赋值形式,其实这道题的根本考点不是函数传参是值传递这里,而是结构赋值是如何进行的。函数f的职责为修改name以及inner.name的值。首先调用函数f并将outer对象传递进去,注意因为函数的形参是解构赋值的形式,所以此处的function({name, inner}){...}相当于function(obj){ var name = obj.name, inner = obj.inner },然后修改name时其实是修改的name变量,所以outer中的name肯定不会受到影响!然后修改inner.name,因为对象的赋值是拷贝内存地址值给对方,所以此处的inner.name就相当于outer.inner.name,所以outer.inner中的name会受到影响。执行完函数f后,输出'鲨鱼辣椒','蜻蜓队长'
结语
此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。创作不易,少年,就请留个赞再走吧!