155个JavaScript基础问题(1-5)
标签:
JavaScript
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
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦