復習一下,相關的知識點。在js的編寫過程中,函數的地位是不言而喻的。今天分享一道題目:
var name = 'jay';
var person ={
name:'kang',
pro:{
name:'Michael',
getName:function(){
return this.name;
},
},
};
console.log( person.pro.getName() );
var people = person.pro.getName;
console.log( people() );
這種問題主要是考驗開發(fā)者對于this的理解。說實話,之前我對this的理解還是比較簡陋的。這個問題我是從另一位朋友那里看到的。
在代碼執(zhí)行階段,js會創(chuàng)建執(zhí)行上下文:

執(zhí)行上下文.png
大家可以看到,this在執(zhí)行上下文的時候確定的也就是在?代碼執(zhí)行的時候確定。
console.log( person.pro.getName() );
這句在執(zhí)行者是person.pro。所以在執(zhí)行上下文中this指向了person.pro。
var people = person.pro.getName;
console.log( people() );
這部分的執(zhí)行者其實沒有的,雖然默認people是window的一個屬性但是沒有顯示的調用的話,執(zhí)行對像就是空的。但是在非嚴格狀態(tài)下undefined會被默認指向window。所以結果就出現(xiàn)'jay'。在嚴格模式下就不會有這個問題了。有興趣的同學可以試試。
var name = 'jay';
var person ={
name:'kang',
pro:{
name:'Michael',
getName:function(){
'use strict'
return this.name;
},
},
};
console.log( person.pro.getName() );
var people = person.pro.getName;
console.log( people() );
本文主要借鑒波同學 這篇文章