鍍金池/ 問(wèn)答/Java  網(wǎng)絡(luò)安全  HTML  Office/ this指向的問(wèn)題,希望大家指點(diǎn)一下

this指向的問(wèn)題,希望大家指點(diǎn)一下

這兩個(gè)在學(xué)ES6的相關(guān)語(yǔ)法,在學(xué)到箭頭函數(shù)的this問(wèn)題的時(shí)候,我與之前學(xué)的ES5中的this進(jìn)行相對(duì)比的時(shí)候,發(fā)現(xiàn)下面這行代碼得到不可思議的結(jié)果:
var age = 77;

function foo() {
    var age = 18;
    setTimeout(function () {
        console.log(this.age);//undefined
    },3000)
}
foo();

clipboard.png

有沒(méi)有大佬知道這里面的問(wèn)題。我的理解是這個(gè)應(yīng)該輸出77.但是這里卻輸出了undefined

回答
編輯回答
舊言

你看錯(cuò)了吧,延時(shí)3s后輸出的才是77,沒(méi)錯(cuò)

clipboard.png

clipboard.png

2017年2月21日 05:43
編輯回答
青黛色

知道問(wèn)題所在了。
援引一位大神的解釋
在瀏覽器環(huán)境下正常的,seTimeout中的this實(shí)際指向window,輸出77。如果在node環(huán)境下運(yùn)行就不一樣了。node環(huán)境下也有自己的setTImeout計(jì)時(shí)器,它的this指向Timeout對(duì)象,Timeout對(duì)象沒(méi)有age屬性,就返回undefined了。你自己可以輸出this看看就明白了。

2018年1月2日 19:41