有梦想,有干货,微信搜索【大千世界】关注这位凌晨还在洗碗的洗碗智者。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。问题一:下面代码的输出是什么letobject_1={name:'小智'}letobject_2=object_1object_1.name='王大智'console.log(object_2)output{name:'王大智'}reason:我们可以看到,赋值运算符在传递非原始数据类型时直接传递地址(引用)。因此,非原始数据类型总是通过引用传递。问题2:以下代码的输出是什么vara=10varshow=function(){console.log(a)a=20}show()outputs10原因:范围提升问题3:输出是什么以下代码控制台。log(name)hello()functionhello(){console.log('你的名字')}varname='小智'output:undefined你的名字搞糊涂了,为什么是undefined,不明白,我知道答案?问题4:下面代码的输出是什么letx=truesetTimeout(()=>{x=false})while(x){console.log('hello')}outputinfiniteprint'hello'是什么原因?我们知道SJ是单线程语言,setTimeout是异步操作,所以会进入任务队列等待机会执行。因为x为真,会进入“while循环”,会不断打印“hello”,2秒后,setTimeout准备执行,但调用栈不为空,已经在运行while循环,所以setTimeout不会获得任何执行机会。问题5:以下代码的输出是什么letx=trueletcount=0setTimeout(()=>{x=false},2000)setInterval(()=>{if(x){console.log(count++)}},200)Output:012345678Reason:setTimeout和setInterval是一个异步操作,所以首先调用setInterva,而setInterval将每200毫秒打印一次计数值,然后在2秒后调用setTimeout,此时x变为false。不满足setInterval的条件,所以不会打印count的值,然后继续执行。代码部署后可能存在的bug,无法实时获知。事后为了解决这些bug,花费了大量的时间在日志调试上。顺便推荐一个好用的bug监控工具Fundebug。交流有梦想,有干货,微信搜索【大千世界】关注这位凌晨还在洗碗的洗碗智者。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。
