Jef_Zhang
Jef_Zhang
采纳率83.3%
2019-02-17 22:00 阅读 970

js,在函数外部给函数添加一个属性,这个工作原理是怎样的

比如以下代码

<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?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    jslang 天际的海浪 2019-02-18 04:54

    你foo函数是直接调用的,函数内this的值是window对象。
    this.abc就等于window.abc。和foo.abc没有关系。
    this.abc没有被赋值,默认值就是 undefined,之后this.abc++就等于是this.abc = undefined + 1,结果当然是NaN。

    点赞 2 评论 复制链接分享

相关推荐