鍍金池/ 問答/HTML/ 關(guān)于一段JS代碼的結(jié)果的疑問。

關(guān)于一段JS代碼的結(jié)果的疑問。

function fn(num) {

console.log( "fn: " + num );
// count用于記錄fn的被調(diào)用次數(shù)
this.count++;

}
fn.count = 0;
var i;
for (i=0; i<10; i++) {

if (i > 5) {
    fn( i );
}

}

// fn: 6
// fn: 7
// fn: 8
// fn: 9

console.log( fn.count ); // 0 -- 耶?咋不是4捏?

不是我寫的代碼,來自網(wǎng)上,問題就是為什么結(jié)果是0,網(wǎng)上有些解釋的不是很好,希望答主們最好能擴展一下。

回答
編輯回答
墨沫

fn(i)調(diào)用時this指的是全局變量,一般是window,window.count就是4
fn.count就一直沒有變過,當(dāng)然是0

2018年5月12日 10:04
編輯回答
傲寒

解釋參考注釋,都在代碼下面,這個沒什么可擴展的,沒有難的知識點,如果 this 不懂,看js 中 this 的指向問題

function fn(num) {

    console.log("fn: " + num);
    //輸出 "fn: " 和 傳入的參數(shù) num
    this.count++;
    // count用于記錄fn的被調(diào)用次數(shù)
    //這個地方的 this 是 全局變量,瀏覽器端是 window,
    //所以上面代碼相當(dāng)于 window.count++
    //window.count 未初始化,初始值默認(rèn)是 undefined,undefined ++ 最終返回 NaN
}
fn.count = 0;//fn.count 始終沒有被動過;
var i;
for (i = 0; i < 10; i++) {

    if (i > 5) {
        fn(i);
        // 保證只把 6-9 傳遞給 fn 作為參數(shù),
    }
}
// 所以這個 for 循環(huán)相當(dāng)于 fn(6),fn(7),fn(8),fn(9)

// fn: 6
// fn: 7
// fn: 8
// fn: 9

console.log(fn.count); // 0 -- 耶?咋不是4捏?
// 回答完畢;
2018年3月20日 22:24
編輯回答
舊酒館

額,fn(i) 等價于 window.fn(i) 。建立你理解下this,找?guī)灼恼戮蜁?。這其實很簡單。

2017年9月21日 03:49
編輯回答
命于你
function fn(num) {
// console.log( "fn: " + num );
// count用于記錄fn的被調(diào)用次數(shù)
this.count++;
}
fn.count = 0;

for (var i = 0; i < 10; i++) {
if (i > 5) {
  fn.call(fn, i); // 改變一下 this 的指向 原因的話他們說了!!! fn(i) 相當(dāng)于 window.fn(i) this就指向window了變?nèi)肿兞縞ount了
}
}
alert(fn.count); // 4
2018年6月23日 00:45