js this问题

function foo(num) {
    console.log("foo: " + num);//6 7 8 9
    this.count++;
}

foo.count = 0;

var i;
for(i = 0; i < 10; i++){
    if(i > 5){
        foo( i );
    }
}
console.log(foo.count);// 0
console.log(count);//NaN

输出6,7,8,9我是知道的,
输出0 是因为this.count指向的是全局。
问题是创建出来的隐试count为什么是NaN???

突然想起来了,会不会是这样:
调用foo函数,隐试创建了一个全局属性count,
count = undefined。undefined ++ 就是NaN???

阅读 2.9k
5 个回答

this.count 是全局的,如果没有定义就是 undefined ++ ,当然是NaN

count都没定义,你定义的是foo

function foo(num) {
    console.log("foo: " + num);//6 7 8 9
    this.count++;// window.count++  Number(undefined)++
}
console.log(count);//NaN

count初始值为undefined
对undefined进行++操作,使得count变为NaN

未定义count

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题