我想在我的js中创建一个静态变量。根据我对小js知识的了解,我可以用这两种方式来做。
function foo (){
if (this.counter==undefined){this.counter=1}
else {this.counter++ } ;
}
function foo (){
if (foo.counter==undefined){foo.counter=1}
else {foo.counter++ } ;
}
这两件事情基本相同,或者我需要谨慎选择其中一件。
我的另一个问题是:为什么在做这些时不需要var?
答案 0 :(得分:2)
不,他们不等同。在第一个示例中,您使用的是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
答案 1 :(得分:1)
var
用于在当前范围内创建变量。
您正在采取的两种方法都是在更广泛范围内的对象上设置属性。