亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

閉包中this指向問題

閉包中this指向問題

SMILET 2018-10-19 10:22:13
以下是簡單的代碼:var name = " Window";var o = {name : "Object", getName : function(){    return function(){        return this.name;     }; }};var a = o.getName;a()();var c = o.getName()();var o1 = {name : "My Object", getName : function(){    var that = this;    return function(){        return that.name;     }; }};var d = o1.getName()();var e = o1.getName;e()();請問1 :var c = o.getName()()中在運行o.getName()時,this的指向還是o,為什么o.getName()()時,this的指向就成了window?請問2 :var a = o.getName;a()();這種方式和o.getName()()有什么區別?
查看完整描述

1 回答

?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

當一個函數作為方法調用時,其this指針指向調用它的對象,否則this為undefined(strict mode)或window(瀏覽器),global(node)

o.getName()()中,getName作為o的方法調用,其this指針就指向了o,所以o.getName()執行時this指向o。
然后o.getName()返回一個函數,o.getName()()就等價于(o.getName())(),可以看到新的函數沒有作為任何一個對象的方法調用,只是孤立的作為函數調用,其this指針就指向window。

如果像var a = o.getName; a()();這樣將getName提取出來再調用,賦值給a的只是getName的函數本身,并不包括調用它的環境。a()運行時a只是一個函數,并沒有作為任何對象的方法,其this指針就已經指向window了。


查看完整回答
反對 回復 2018-11-08
  • 1 回答
  • 0 關注
  • 583 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號