2015-04-05 57 views
1

我在javascript中有一行代碼有問題。我做了一個funtcion:Javascript for-loop凍結了瀏覽器,沒有語法錯誤

function evvalt(valtoztat){ 
    for(i=0;i<12;i++) naptar(valtoztat); 
} 

如果我這樣做,那麼瀏覽器凍結了。 naptar(函數)沒有問題,它完美的工作。這個問題在未來的有趣的一面:

function evvalt(valtoztat){ 
    naptar(valtoztat); 
    naptar(valtoztat); 
    naptar(valtoztat); 
    naptar(valtoztat); 
    naptar(valtoztat); 
    naptar(valtoztat); 
    naptar(valtoztat); 
    naptar(valtoztat); 
    naptar(valtoztat); 
    naptar(valtoztat); 
    naptar(valtoztat); 
    naptar(valtoztat); 
} 

這是沒有問題的代碼..:o 我想知道是什麼問題。

謝謝您的assistence, 大衛

+1

你得到了一個無限循環,這就是發生了什麼.. – Chrillewoodz 2015-04-05 17:43:45

+0

當你做'for(var i = 0; ...'? – 2015-04-05 17:46:30

+0

時會發生什麼?請勿使用簡寫語法,請使用括號{} – Chrillewoodz 2015-04-05 17:46:53

回答

3

既然你沒有聲明的變量i,因爲它被視爲一個全局變量局部變量,它是可能的東西在你的naptar()功能也在不斷變化造成無限循環的值爲i

在使用i這樣的前前添加var,使之成爲局部變量:

function evvalt(valtoztat){ 
    for(var i=0;i<12;i++) naptar(valtoztat); 
} 

而且,也期待在naptar()因爲你所使用i的地方沒有宣佈它爲本地變量(或者在naptar()調用的任何函數中)。您應始終在函數中聲明局部變量爲var,以便它們不會成爲隱式全局變量。

更好的是,在Javascript中開始使用strict mode,創建這樣一個偶然的全局變成了一個錯誤,而不是一個無聲的錯誤。

+0

謝謝你的幫助!這解決了這個問題:) 我用這種語言做我的第一件事,我不知道。我寫了everyi for循環變量(沒有任何書面,如你所說)。 – Sanapci 2015-04-05 17:58:19

0

你正在影響全球空間,所以你有可能在其他地方改變你的'我'。

而做的:

for (var i = 0, i < .. , i++) {.. 

如果你做的for循環以同樣的方式在其他地方也難怪,它不工作。