请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

想请老师分析下这道题,不太明白为什么第二个输出是undefined

function A() {
    let a = 3
    this.a = 4
    setTimeout(function() {
        console.log(a)
    },100)
    setTimeout(function() {
        console.log(this.a)
    },200)
    setTimeout(() => {
        console.log(a)
    },300)
    setTimeout(() => {
        console.log(this.a)
    },400)
}
new A()

正在回答

2回答

解答:第二个输出的是 undefined

你可以在第一行代码之前插入 var a = 100; 或者 window.a = 100; 

然后在执行所有的代码,你会发现第二个输出的是 100 。

即,第二个 this 指向的是 window ,this.a 即 window.a 。

当 window.a 未定义时,就会输出 undefined

var a = 100;
function A() {
    let a = 3
    this.a = 4
    setTimeout(function() {
        console.log(1, a)
    },100)
    setTimeout(function() {
        console.log(2, this.a) // 100
    },200)
    setTimeout(() => {
        console.log(3, a)
    },300)
    setTimeout(() => {
        console.log(4, this.a)
    },400)
}
new A()


0 回复 有任何疑惑可以回复我~
提问者 December_Hong 2020-12-09 19:28:56

为什么第二个输出的this指向的是window,第四个this指向的是A()

0 回复 有任何疑惑可以回复我~
  • 双越 #1
    第四个 this 指向 (new A()) ,你得继续学一学箭头函数。
    课程里有,再去找来学一学。
    回复 有任何疑惑可以回复我~ 2020-12-09 21:20:24
  • 提问者 December_Hong 回复 双越 #2
    啊!老师我明白了!没有注意到是箭头函数!谢谢老师!
    回复 有任何疑惑可以回复我~ 2020-12-09 21:38:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信