我需要在JavaScript循环中正确增加一个函数

时间:2016-10-18 23:16:39

标签: javascript html

请耐心等待。我正在研究以下循环,我试图找出为什么foo.count永远不会增加并显示0.我想重写这个例子,以便foo.count正确递增。我知道我忽视了一些事情。有什么建议? 感谢

function foo(num) {
  console.log("foo: " + num);
  this.count++;
}
foo.count = 0;

var i;
for (i = 0; i < 10; i++) {
  if (i > 5) {
    foo(i);
  }
}
// foo: 6 
// foo: 7 
// foo: 8 
// foo: 9 
console.log(foo.count); // Still 0!

3 个答案:

答案 0 :(得分:3)

如Jaromanda所述,您错误地使用了this。在这种情况下,您需要小心使用它。尝试将this.count++替换为foo.count++

function foo(num) {
  console.log("foo: " + num);
  foo.count++;
}
foo.count = 0;

var i;
for (i = 0; i < 10; i++) {
  if (i > 5) {
    foo(i);
  }
}
// foo: 6 
// foo: 7 
// foo: 8 
// foo: 9 
console.log(foo.count); // Still 0!

请注意,使用this引用它所包含的对象,而不是包含在其中的函数,因为它似乎错误地将其用于。在引用当前包含的对象时,必须使用“this”运算符,不仅是为了清晰起见,还要避免潜在的歧义。

答案 1 :(得分:3)

根据您所写的内容,如果您在console.log(this)函数内foo(),则会看到它打印window对象。

function foo() {
  console.log(this); // prints "window" and/or attributes
}
foo();

您已在count上创建了window变量,并将其固定在foo()函数的一侧。但是,附加到函数与内部函数的范围不同。

因此,foo.count变量永远不会增加,因为它与this.count(在window上)不同。

答案 2 :(得分:0)

//"this" is window object. In the following code, I have replaced "foo.count" by "count".
  function foo ( num ) { 
        console.log ( "foo: " + num );
        this.count++; 
        }

            count = 0; 
            var i; 
            for ( i = 0 ; i < 10 ; i ++ ) { 
            if ( i > 5 ) { 
            foo ( i ); 
            } 
        } 
        // foo: 6 
        // foo: 7 
        // foo: 8 
        // foo: 9 
        console.log ( foo.count ); // Still 0!