復(fù)習(xí)一下桶蝎,相關(guān)的知識(shí)點(diǎn)驻仅。在js的編寫過程中,函數(shù)的地位是不言而喻的登渣。今天分享一道題目:
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() );
這種問題主要是考驗(yàn)開發(fā)者對(duì)于this的理解噪服。說實(shí)話,之前我對(duì)this的理解還是比較簡陋的胜茧。這個(gè)問題我是從另一位朋友那里看到的粘优。
在代碼執(zhí)行階段,js會(huì)創(chuàng)建執(zhí)行上下文:
執(zhí)行上下文.png
大家可以看到呻顽,this在執(zhí)行上下文的時(shí)候確定的也就是在?代碼執(zhí)行的時(shí)候確定雹顺。
console.log( person.pro.getName() );
這句在執(zhí)行者是person.pro。所以在執(zhí)行上下文中this指向了person.pro廊遍。
var people = person.pro.getName;
console.log( people() );
這部分的執(zhí)行者其實(shí)沒有的嬉愧,雖然默認(rèn)people是window的一個(gè)屬性但是沒有顯示的調(diào)用的話,執(zhí)行對(duì)像就是空的喉前。但是在非嚴(yán)格狀態(tài)下undefined會(huì)被默認(rèn)指向window没酣。所以結(jié)果就出現(xiàn)'jay'。在嚴(yán)格模式下就不會(huì)有這個(gè)問題了被饿。有興趣的同學(xué)可以試試四康。
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() );
本文主要借鑒波同學(xué) 這篇文章