亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

幫忙解析下一段js代碼,,

幫忙解析下一段js代碼,,

九州編程 2018-09-04 13:13:26
var length = 10;function fn() {    console.log(this.length);}var obj = {    length: 5,    method: function() {        fn();        arguments[0]();    }};obj.method(fn, 1);結果:10 2 為神馬??
查看完整描述

1 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

稍稍修改一下你的代碼

var length = 10;function fn() {    console.log(this.toString());    console.log(this.length);
}var obj = {    length: 5,    method: function() {
        fn();        arguments[0]();
    }
};

obj.method(fn, 1);

https://img1.sycdn.imooc.com//5bb07e1c000187bf02200249.jpg


arguments[0]() 中的 this 是 arguments

看起來 arguments 是一個數組,所以 arguments[0]() 的執行似乎應該按函數數組的方式來運行,但實際不是,因為 arguments 是一個偽數組不是真正的數組,所以 argumnts[0] 其實是 arguments["0"],"0" 是屬性名稱。

現在假設屬性名稱是 "a"arguments["a"] = fn,那么

arguments["a"]() 和 arguments.a() 是等同的,這時候 fn 中的 this 就是 arguments,這樣很好理解吧?類似的,如果屬性名是 "0",雖然不能用 arguments.0() 這種方式調用,但用 arguments["0"]() 這種方式調用也是一樣的,和 arguments["a"] 類似,所以第二個輸出是 2,即 arguments.length。


查看完整回答
反對 回復 2018-09-30
  • 1 回答
  • 0 關注
  • 901 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號