2016-10-18 15 views
1

私にご負担ください。私は次のループに取り組んでいます。なぜfoo.countが増分されずに0が表示されるのか理解しようとしています。私はfoo.countが正しくインクリメントされるようにこの例を書き直したいと思います。私は何かを見落としていることを知っている。助言がありますか? Jaromandaで述べたように おかげJavaScriptループで関数を正しくインクリメントする必要があります

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

あなたが投稿したコードの文脈では、this.countはfoo.countではありません - 'this'がどのように動作するのかを知る必要があります - この例では、' foo.count'を常に使用するとあなたは黄色になります –

+0

可能な重複した[コールバック内の正しい\ 'this \' /コンテキストにアクセスする方法?](http://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-context-inside- a-callback) –

+0

@ジャロマンダX入力してくれてありがとう!私は "this"の使用を見落としました。 – Jimmy

答えて

3

は、あなたは間違ってthisを利用しています。このシナリオでは、使用する場所に注意する必要があります。 this参照あなたが誤ってためにそれを取っている表示される関数は、中に含まれていない、の中にそれが含まれているオブジェクトを使用していること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.count++を交換してみてください。現在含まれているオブジェクトを参照するときは、明確にするためだけでなく、潜在的なあいまいさを避けるために、 'this'演算子を使用する必要があります。

+0

非常に役に立ちました!ありがとうございました – Jimmy

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! 
3

書いた内容に基づいて、foo()ファンクション内のconsole.log(this)には、windowオブジェクトが印刷されていることがわかります。

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

あなたはwindowの両方でcount変数を作成し、foo()機能の側面にボルトで固定しました。しかし、関数に添付されているのは、の中にある関数のスコープと同じではありません。

変数this.count(これはwindowにあります)とは異なるため、foo.count変数は決して増加しません。

関連する問題