不,它们不相等。在您的第一个示例中,您使用的是this
. this
实际上可以根据调用函数的方式而改变。
function showThis(){
console.log(this);
}
var obj = { };
obj.showThis = showThis;
showThis(); // gives 'window', or the top-most scope of your page
obj.showThis(); // gives obj as 'this'
如果您始终以相同的方式调用该函数,那么这仅意味着该值counter
被跟踪为window.counter
. 这很糟糕,因为您可能不小心counter
在该范围内命名了一个实际变量,您现在在其他地方以不同的方式使用它。如果您不是每次都以相同的方式调用它,那么this
将会有所不同,并且可能不会给您想要的行为。
foo
如果您试图计算被调用的次数,而与调用它的方式/谁无关,那么您的第二种方法更合适。为了代码澄清/约定,我会这样写:
function foo (){
// If counter does not exist, create it and initialize it to 0.
foo.counter = foo.counter || 0;
foo.counter++;
}
foo.counter; // undefined, since foo has never been called yet
foo();
foo.counter; // is now 1