请耐心等待。我正在研究以下循环,我试图找出为什么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!
答案 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!