『每日一题』搬砖

公众号上看的每日一题,搬砖来记录下,会把一些重点的评论摘抄下来。

下面输出什么???

1、

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

sayHi()
  • A: Lydia 和 undefined
  • B: Lydia 和 ReferenceError
  • C: ReferenceError 和 21
  • D: undefined 和 ReferenceError

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)
}
  • A: 0 1 2 和 0 1 2
  • B: 0 1 2 和 3 3 3
  • C: 3 3 3 和 0 1 2

3、

const shape = {
  radius: 10,
  diameter() {
    return this.radius * 2
  },
  perimeter: () => 2 * Math.PI * this.radius
}
  • A: 20 and 62.83185307179586
  • B: 20 and NaN
  • C: 20 and 63
  • D: NaN and 63

4、

+true;
!"Lydia";
  • A: 1 and false
  • B: false and NaN
  • C: false and false

5、哪个正确

const bird = {
  size: 'small'
}

const mouse = {
  name: 'Mickey',
  small: true
}
  • A: mouse.bird.size是无效的
  • B: mouse[bird.size]是无效的
  • C: mouse[bird[“size”]]是无效的
  • D: 以上三个选项都是有效的

答案和解答:
1、D
知识点:变量提升
一:undefined
(1) var 存在变量提升,所以name等于undefined
(2) let 不存在变量提升,并且支持块级作用域、禁止重复声明、暂时性死区
二:ReferenceError
(1)let 声明的变量存在暂时性死区。
使用 let/const 声明的变量,会使区块形成封闭的作用域。若在声明之前使用变量,就会报错。
2、D
知识点:闭包、变量提升
var声明无块级作用域,let有块级作用域;同时settimeout为异步函数。等循环到最后,var的值被覆盖掉成最后一个值,而let每个值对应一块执行区域。 这里说明下,for循环是很快的,并不会等异步函数执行完当前操作才进行下一个哟。 所以说循环的时候用let百分百不会出现var声明的问题呢!
3、B
知识点为:箭头函数与普通函数的差别
1,shape定义所在环境,是window对象。
2,diameter方法中的this指向方法调用者,即shape。perimeter方法中的this指向方法调用者所在的环境,即window对象。
4、A
知识点:运算符之间的转换
1、true或false前面加上 + 或者 - 都会将其转变为对应的Number值.
2、字符串的话,前面加 !(非) ,会将其转变为Boolean值。非空字符串为true,加上!后,即转换为false.
5、A
知识点:对象获取属性的方式

获取属性的方式:
1、a.b
2、a[b].
key属性用中括号可以动态获取,获取属性两种方式.和[],[]里面可以写变量或者字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值