Jef_Zhang 2019-02-17 22:00 采纳率: 0%
浏览 1042
已采纳

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条回答

  • 天际的海浪 2019-02-18 04:54
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题