比如以下代码
<script>
function foo(num) {
console.log( "foo: " + num );
console.log( window.abc );
// 记录 foo 被调用的次数
this.abc++;
}
foo.abc = 2;
var i;
for (i=0; i<10; i++) {
if (i > 7) {
foo( i );
}
}
//foo: 8
//undefined
//foo: 9
//NaN
//2
//NaN
console.log( foo.abc ); // 2 -- WTF?
console.log( abc ); // NaN -- WTF?
</script>
为什么我在函数外部给函数定义一个属性的时候,也会把这个属性定义到函数上级作用域(window)下面呢?而且,为什么,第一次打印的时候,window下面的abc属性是undefined,从第二次开始就成了NaN?