不,它們不相同。在你的第一個例子中,你正在使用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
你需要閱讀有關** **範圍 – acudars
我不知道在JavaScript的執行線索,但通常一個建築像'FOO .counter'使變量'counter'可以從任何'foo'對象中獲得。 (例如'var a = new Foo(); var b = new Foo(); a.counter === b.counter;'。我不確定這是否也適用於JavaScript。 – Sumurai8
您是否打算使用'foo'使用'new'創建對象,或者只是把它作爲一個函數調用而不用'new'? –