关于一段JS代码的结果的疑问。

function fn(num) {

console.log( "fn: " + num );
// count用于记录fn的被调用次数
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捏?

不是我写的代码,来自网上,问题就是为什么结果是0,网上有些解释的不是很好,希望答主们最好能扩展一下。

阅读 2.3k
4 个回答

fn(i)调用时this指的是全局变量,一般是window,window.count就是4
fn.count就一直没有变过,当然是0

解释参考注释,都在代码下面,这个没什么可扩展的,没有难的知识点,如果 this 不懂,看js 中 this 的指向问题

function fn(num) {

    console.log("fn: " + num);
    //输出 "fn: " 和 传入的参数 num
    this.count++;
    // count用于记录fn的被调用次数
    //这个地方的 this 是 全局变量,浏览器端是 window,
    //所以上面代码相当于 window.count++
    //window.count 未初始化,初始值默认是 undefined,undefined ++ 最终返回 NaN
}
fn.count = 0;//fn.count 始终没有被动过;
var i;
for (i = 0; i < 10; i++) {

    if (i > 5) {
        fn(i);
        // 保证只把 6-9 传递给 fn 作为参数,
    }
}
// 所以这个 for 循环相当于 fn(6),fn(7),fn(8),fn(9)

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

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

额,fn(i) 等价于 window.fn(i) 。建立你理解下this,找几篇文章就会了。这其实很简单。

function fn(num) {
// console.log( "fn: " + num );
// count用于记录fn的被调用次数
this.count++;
}
fn.count = 0;

for (var i = 0; i < 10; i++) {
if (i > 5) {
  fn.call(fn, i); // 改变一下 this 的指向 原因的话他们说了!!! fn(i) 相当于 window.fn(i) this就指向window了变全局变量count了
}
}
alert(fn.count); // 4
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题