第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

一道關于javascript this指向問題

一道關于javascript this指向問題

收到一只叮咚 2019-03-15 18:13:34
一道關于javascript指針的題目,求詳細的解答分析。var length = 10;function fn(){    alert(this.length)}var obj = {    length: 5,    method: function(fn){        fn() // ?        arguments[0]() // ?    }}obj.method(fn)
查看完整描述

9 回答

?
元芳怎么了

TA貢獻1798條經(jīng)驗 獲得超7個贊

var length = 10;

function fn() {

  console.log('fn:', this);

  console.log('fn:', this.length);

var obj = {

  length: 5,

  method: function(fn) {

    fn() // ?

    console.log(arguments[0]);

    arguments[0](); // ?

  }

};


obj.method(fn);

這樣會清楚一點。第一個fn()由于沒有對象上下文,所以直接調用fn()時其this指向的是全局的window或process,所以打印出來的length是全局的,也就是10。第二個arguments[0]()則有了對象上下文arguments,此時其this指向arguments,從而打印出來的length其實是arguments.length,即為1,


查看完整回答
反對 回復 2019-03-24
?
紅顏莎娜

TA貢獻1842條經(jīng)驗 獲得超13個贊

如果直接把這段代碼放在html里面的script標簽里面,length就是全局變量了,可以在windows下面看到length。


var length = 10;

function fn(){

    alert(this.length)

}

var obj = {

    length: 5,

    method: function(fn){

        fn() // 這里輸出的是你定義的windows下面全局變量length 10

        arguments[0]() // 這里arguments的length為1,而fn 里面的this指向arguments,所以輸出1.

    }

}


查看完整回答
反對 回復 2019-03-24
?
UYOU

TA貢獻1878條經(jīng)驗 獲得超4個贊

第一個直接調用fn,this指向window。第二個arguments[0](),相當于一個對象調用自身的某個屬性函數(shù)(類似obj.fn(),fn函數(shù)中的this會指向obj。),所以第二個this指向arguments。


查看完整回答
反對 回復 2019-03-24
?
喵喵時光機

TA貢獻1846條經(jīng)驗 獲得超7個贊

var length = 10;

function fn(){

    alert(this.length)

}

var obj = {

    length: 5,

    method: function(fn){

        fn() // 10 指向 window

        arguments[0]() // 1 指向 arguments

    }

}

obj.method(fn)

第一個問題:fn() 指向這個知識點:

任意函數(shù)里如果嵌套了 非箭頭函數(shù),那這個時候 嵌套函數(shù)里的 this 在未指定的情況下,應該指向的是 window 對象

第二個問題:arguments[0]()指向這個知識點:

在方法調用(如果某個對象的屬性是函數(shù),這個屬性就叫方法,調用這個屬性,就叫方法調用)中,執(zhí)行函數(shù)體的時候,作為屬性訪問主體的對象和數(shù)組便是其調用方法內 this 的指向。(通俗的說,調用誰的方法 this 就指向誰;)

這個地方,可能會讓人迷惑,arguments[0]指向 fn,所以 arguments[0]() 是作為 arguments對象的屬性[0]來調用 fn的,所以 fn 中的 this 指向屬性訪問主體的對象 arguments

舉個例子:

[function fn(){alert(this.length)}][0]()//1

數(shù)組也是對象,只不過數(shù)組對象的整型屬性會計入 length 屬性中,并被區(qū)別對待,這里就是調用數(shù)組對象的0屬性,函數(shù)作為數(shù)組對象的屬性調用,函數(shù)中的this 當然指向這個數(shù)組,所以返回數(shù)組的length ,當然是 1;

其他詳情戳js 中 this 的指向問題


查看完整回答
反對 回復 2019-03-24
?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

樓上的說得很對,這里告訴樓主一句話判斷this指向問題: 誰調用的,this就指向誰,沒有調用者,非嚴格模式下就是window,否則undefined


查看完整回答
反對 回復 2019-03-24
?
子衿沉夜

TA貢獻1828條經(jīng)驗 獲得超3個贊

我感覺fn()你應該是會的,函數(shù)的直接調用。


arguments[0]()可以看下這個。


var obj = {

    fn: function () {console.log(this)}

    1: function () {console.log(this)}

}

obj.fn()

obj[1]()

// 這倆調用沒什么區(qū)別,都是對象方法的調用,arguments[0]()同理


查看完整回答
反對 回復 2019-03-24
?
繁星點點滴滴

TA貢獻1803條經(jīng)驗 獲得超3個贊

第一個指向window,第二個指向method


查看完整回答
反對 回復 2019-03-24
?
哆啦的時光機

TA貢獻1779條經(jīng)驗 獲得超6個贊

第一個fn()this指向win win對象的length屬性并沒有定義值,所以返回undefined,第二個this指向argumengts對象,因為fn作為一個參數(shù)存儲在arg對象里,argumengts的長度為1


查看完整回答
反對 回復 2019-03-24
?
莫回無

TA貢獻1865條經(jīng)驗 獲得超7個贊

正確答案是:


undefined

1

第一個好理解,function在沒有綁定this前,都指向window對象。

第二個,必須理解arguments這個參數(shù)。指的是function的所有實參,與形參無關。也就是調用函數(shù)時,實際傳入的參數(shù),以對象形式存在:{"0": "", "1": ""},本題中的值為:{ '0': [Function: fn] }。那么arguments[0]就是[Function: fn],當調用arguments[0]()時,this指向的是arguments對象,相當于調用了arguments.length,所以值為1


查看完整回答
反對 回復 2019-03-24
  • 9 回答
  • 0 關注
  • 518 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號