查看原文
其他

求助,这几道面试题有些我回答不出来了

脚本之家 2022-10-04

The following article is from 大迁世界 Author 前端小智

 关注脚本之家”,与百万开发者在一起
来源 | 大迁世界 (ID:qq449245885)
已获得原公众号的授权转载

最近看到一些面试题,自己太菜了,给整懵了,如果你有更好的答案,欢迎留言分享。

问题1:下面代码输出结果是什么

let object_1 = { name: '小智' }
let object_2 = object_1
object_1.name = '王大志'
console.log(object_2)

输出

{ name: '王大志' }

原因:我们可以看到,在传递非原始数据类型时,分配运算符直接传递地址(引用)。因此,非原始数据类型总是通过引用来传递。

问题2:下面代码输出结果是什么

var a = 10
var show = function () {
  console.log(a)
  a = 20
}
show()

输出  10

原因:作用域提升

问题3:下面代码输出结果是什么

console.log(name)
hello()
function hello() {
  console.log('你的名字')
}

var name = '小智'

输出:

undefined
你的名字

懵了,为啥是undefined ,没搞懂,有知道答案的吗?

问题4:下面代码输出结果是什么

let x = true
setTimeout(() => {
  x = false
})
while (x) {
  console.log('hello')
}

输出

无限打印 'hello'

原因是什么?我们知道 SJ 是一种单线程语言,setTimeout是一个异步操作,所以它会进入任务队列并等待执行的机会。

因为 x 为 true,所以会进入 "while循环",它将连续打印 "hello",2秒后,setTimeout准备执行,但调用栈不是空的,它已经在运行 while 循环,所以 setTimeout 不会得到任何执行机会。

问题5:下面代码输出结果是什么

let x = true
let count = 0
setTimeout(() => {
  x = false
}, 2000)
setInterval(() => {
  if (x) {
    console.log(count++)
  }
}, 200)

输出:

0
1
2
3
4
5
6
7
8

原因:setTimeout 和 setInterval 是一个异步操作,所以首先,它调用 setInterva。,而 setInterval 将每隔 200 毫秒打印一次 count 值,然后在2秒后 setTimeout将被调用,此时 x 被更改为 falsesetInterval条件不满足,所以不会在打印 count 的值,然后继续往下执行。



<END>

【轻薄款上架】 🕚

  推荐阅读:

终于!我找到程序员爱穿卫衣的原因了

JavaScript 逆向爬虫中的浏览器调试常见技巧

JavaScript 新增两个原始数据类型

金三银四!我带你复习50个JavaScript「基础」知识点

每日打卡赢积分兑换书籍入口

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存