关于this的误解:this指向函数自身
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被调用了多少次呢?
console.log(foo.count); // 0
-
foo
被执行了4次,但是foo.count
仍然是0
。这是因为执行foo.count=0
时,的确向函数对象foo
添加了一个属性count
,但是函数内部代码this.count
中的this
并不是指向那个函数对象,所以虽然属性名相同,根对象却并不相同。 -
this.count++
实际上创建了一个全局变量count
,它的值为NaN
。
改进
function foo(num) {
console.log("foo: " + num);
this.count++;
}
foo.count = 0;
var i;
for(i=0; i<10; i++) {
if(i > 5) {
foo.call(foo, i); // 使用call改变this的指向
}
}
console.log(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);
}
}
console.log(foo.count);