先看一道面試題:
var number = 10; function fn() { console.log(this.number); } var obj = { number: 2, show: function(fn) { this.number = 3; fn(); arguments[0](); } }; obj.show(fn);
打印的結果如下:
obj.show 中,第一個函數執行 fn() 結果為 10,第二個 arguments[0]() 執行結果為 undefined。
原因是:
第一個 fn 在執行時,this 指向 window,window,number 為10;
第二個 fn 在執行時,實際上為 argements.0 在執行,也就是此時的 this 為 arguments(畢竟 arguments 為偽數組,偽數組也還是對象,可理解為 obj.0)。因為 arguments 的屬性中沒有 number 這個屬性,所以返回 undefined