ITPub博客

首页 > IT职业 > IT职场 > 155个JavaScript基础问题(1-5)

155个JavaScript基础问题(1-5)

IT职场 作者:dav2100 时间:2021-09-09 08:53:00 0 删除 编辑

1. 输出是什么?

function sayHi() {
  console.log(name)
  console.log(age)
  var name = 'Lydia'
  let age = 21
}

sayHi()
复制代码

答案是:undefined和报错 因为var 定义的变量具有变量提升的效果,但是仅仅是变量声明的提升,并未进行赋值,所以是undefined,let定义的变量不具备变量提升的效果,所以是报错的。 图片描述

2. 输出是什么?

for (var i = 0; i  3; i++) {
  setTimeout(() => console.log(i), 1)
}

for (let i = 0; i  3; i++) {
  setTimeout(() => console.log(i), 1)
}

复制代码

答案是:333 和 012,因为JS的事件循环机制,setTimeout属于宏任务,要等到同步代码执行完之后才能执行,var在此处定义的是全局变量,因此同步代码执行完之后i已经变成了3,所以打印3个3,但是let定义的变量会形成一个块级作用域,因此是0 1 2

3. 输出是什么?

const shape = {
  radius: 10,
  diameter() {
    return this.radius * 2
  },
  perimeter: () => 2 * Math.PI * this.radius
}

shape.diameter()
shape.perimeter()

复制代码

答:输出是20和NaN,因为diameter中的this指的是shape中的radius,但是perimeter由于是箭头函数所以,当我们调用 perimeter 时,this 不是指向 shape 对象,而是它的周围作用域(在例子中是 window)。

4. 输出是什么?

+true;
!"Lydia";
复制代码

解:+号会将true变为1,+号倾向于返回一个值,但是!倾向于返回一个布尔值,因为"Lydia"是真实存在的,所以取反之后是false。

5. 哪一个是正确的?

const bird = {
  size: 'small'
}
const mouse = {
  name: 'Mickey',
  small: true
}
复制代码

图片描述

答案:A,因为mouse通过点的形式调用bird的前提是mouse有这个属性,但是它没有,所以是无效的,但是bird.size是真实存在的,通过[]调用里面存放的是small这个字符串,这个和C选项是一样的,同理说明D的说法是不对的,所以本题选A。

作者:Always_positive
链接:https://juejin.cn/post/6966781111888265253
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4479/viewspace-2797250/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-10-17

  • 博文量
    176
  • 访问量
    17570