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,

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.
}
}

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

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 的指向問題

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

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]()同理

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

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
添加回答
舉報