为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梦里花落0921 2019-02-27 09:22:35
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: 9console.log( fn.count ); // 0 -- 耶?咋不是4捏?不是我写的代码,来自网上,问题就是为什么结果是0,网上有些解释的不是很好,希望答主们最好能扩展一下。 评论邀请回答编辑
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

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

查看完整回答
反对 回复 2019-03-11
?
HUX布斯

TA贡献1876条经验 获得超6个赞

解释参考注释,都在代码下面,这个没什么可扩展的,没有难的知识点,如果 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捏?

// 回答完毕;


查看完整回答
反对 回复 2019-03-11
  • 2 回答
  • 0 关注
  • 638 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号