最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

js一道面試題。貌似閉包,上下文,函數(shù)調(diào)用,聲明,setTimeout()

js一道面試題。貌似閉包,上下文,函數(shù)調(diào)用,聲明,setTimeout()

Cats萌萌 2018-07-31 21:20:55
遇到這樣一道題,一個(gè)函數(shù)內(nèi),有兩個(gè)alert函數(shù),第二次alert需要在第一次alert2000ms后調(diào)用1 .    var Obj=function(msg){2 .                  this.msg=msg;3 .                  this.shout=function(){4 .                               alert(this.msg);5 .                   };6 .                  this.waitAndShout=function(){7 .                                setTimeout(this.shout,2000);8 .                 };9 .        }10.        var aa=new Obj("abc");11.        aa.waitAndShout(); //2s后undefined搜了一下答案發(fā)現(xiàn)無關(guān)閉包,只是有關(guān)上下文,但不是特別明白,大神求帶?。。。∥易詈蟮慕鉀Q方法是在34行間插入 var this.msg= msg; 在 10.11行插入 aa.shout();不知有沒有更好的(優(yōu)雅-。-)解決方法?抱歉剛剛沒描述清楚,這道題的本意應(yīng)該是調(diào)用aa.waitAndShout()呼出兩個(gè)間隔兩秒的alert**我想請(qǐng)教的是這道題要怎么改,才能達(dá)到這種效果最后或者是我理解錯(cuò)了?還是就是考察this指針的用法
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊

setTimeout(this.shout.bind(this),2000);

樓下好些人答得亂七八糟的,我再補(bǔ)充一下

此題關(guān)鍵在于: 將 this.shout 傳給 setTimeout 后,shout 的 this 就不是 aa 而是 window 了,因此要用 bind 重新綁定。


查看完整回答
反對(duì) 回復(fù) 2018-08-06
?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊

var that = this;

是一個(gè)辦法,但是不推薦,可讀性不是特別好。

function () {}.bind(this);

比較推薦

最好用ES6的箭頭函數(shù),可以完美解決掉setTimeout里callback的這個(gè)問題

setTimeout(() => {waitAndShout(this.msg);});


查看完整回答
反對(duì) 回復(fù) 2018-08-06
  • 2 回答
  • 0 關(guān)注
  • 1325 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)