前端瑣事

復習一下,相關的知識點。在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() );

本文主要借鑒波同學 這篇文章

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容