目录
今日题
题目
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每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。创作不易,少年,就请留个赞再走吧!