いいえ、それらは同等ではありません。最初の例では、を使用して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
どのように/誰がそれを呼び出しているかに関係なく、呼び出されている回数を数えようとしている場合は、2番目のアプローチがより適切です。コードの明確化/慣習のために、次のように記述します。
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