我試圖清理編碼中一個長期存在的壞習慣:將小部件寫入全局範圍。對象不符合預期的範圍
我爲網頁上的新聞製作了一個很大的,大部分是自包含的腳本,並且在我將所有東西塞入一個函數之後它的工作效果令人驚喜,...事實上太好了。
爲了確保我沒有作弊,我寫了下面的代碼,以確保我的作用域是正確的:
var story_count = "THIS IS NOT A NUMBER";
console.log(story_count);
touch_roll = function()
{
this.story_count = 0;
}
console.log(story_count);
touch_roll();
console.log(story_count);
滿以爲這產生控制檯
THIS IS NOT A NUMBER
THIS IS NOT A NUMBER
THIS IS NOT A NUMBER
以下響應我完全驚訝地發現輸出實際上是這個:
THIS IS NOT A NUMBER
THIS IS NOT A NUMBER
0
是this
不是我認爲的是什麼?研究並沒有真正的幫助,但我有點被燒燬,所以我完全有可能讀錯了。如果不是這樣,那麼我如何將所有命名空間完全保留在該函數的範圍內,以免混淆網站上的現有位?
按以下馬特的答案,這裏是更正後的代碼:說
var story_count = "THIS IS NOT A NUMBER";
console.log(story_count);
var touch_roll = new function()
{
this.story_count = 0;
console.log(story_count);
}
console.log(story_count);
通過聲明touch_roll
爲var
和實例功能new
的Javascript評估功能爲對象運行時間(所以我們也可以刪除在底部的電話touch_roll()
)。
校正輸出如下:
THIS IS NOT A NUMBER
0
THIS IS NOT A NUMBER
所以'var touch_roll = new function()'? – 2012-07-10 10:50:00
工作奇蹟。謝謝!好的解釋也一樣。 – 2012-07-10 10:51:11
@SandyGifford:應該訣竅! – Matt 2012-07-10 10:51:12