3 回答

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個贊
var func = obj.dbl; func();
第一句把函數(shù)引用賦值給一個變量,會造成 this 丟失,所以 func 內(nèi)部的 this 是指向全局對象的。所以函數(shù)內(nèi)部 this.val => window.val => val => 1 。這三個是相等的。
所以結(jié)果是:
this.val = this.val * 2 => 2
val = val * 2 => 4
val: 4this.val: 4

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個贊
考慮了很久,執(zhí)行obj.dbl()時,this.val 的 this 指向 obj ,而下一行的 val 指向 window。所以,由 window.val 輸出 2,obj.val 輸出4,最后一行func(); 的調(diào)用者是 window, 所以,現(xiàn)在的 this.val 的 this 指向 window,剛剛window.val已經(jīng)是2了,
所以現(xiàn)在this.val = 2;的執(zhí)行結(jié)果就是4,然后val=2;的執(zhí)行結(jié)果,就是8了。所以,最終的結(jié)果就是輸出2、4、8、8

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個贊
var func = obj.dbl; 這一步已近改變了this指向全局
當(dāng)執(zhí)行func();的時候this.val = 2;val = 2;都是對全局變量的修改 默認(rèn)全局為1 相當(dāng)于122
然后console. log('val:', val) ;console. log( 'this.val:', this.val) ;都是打印修改后的全局變量而已
func();執(zhí)行一次1 乘以 2 乘以 2 執(zhí)行兩次1 乘以 2 乘以 2 乘以 2 乘以 2
添加回答
舉報