2014-03-30 78 views
-2

我在javascript中使用類似下面的代碼。這是錯的嗎?我可以在循環語句中定義函數嗎?

for(i=0;i<5;i++){ 

function somefunction(){ 
/*function code here*/ 
} 

somefunction();//call that function inside the loop 
}//end of for loop 

我想我寫了一個代碼使用這個,我搞砸了一切。

+1

第一個問題:爲什麼你需要在循環的**內部定義**?另外,你是否試圖在循環之外訪問它? – PlasmaPower

+0

我不確定,但使用匿名函數('var someFunction = function(){/ * function code here * /}')應該可以工作 – Markasoftware

+1

您可以,但是*爲什麼*您想要這樣做?你認爲「我」的價值對你來說意想不到嗎? – alex

回答

3

函數和變量在JavaScript的作用域到最近功能,而不是最近的{ ... })。

所以你不能在每個循環周圍定義不同的函數或變量,因爲你在同一個範圍內覆蓋相同​​的名字。

因此,在循環內部放置這樣的聲明是個壞主意,無論標準或實現是否允許您這樣做,因爲它只會誤導任何人閱讀代碼(很可能是您自己!)。

您可以在循環內創建一個匿名函數,但沒有更多的上下文,我無法給出一個如何幫助您的例子。

+0

這是真的,但僅僅是因爲瀏覽器已經擴展了語言(並不總是兼容的方式)。這種做法在「嚴格」模式下是不允許的。 – Pointy

+0

@Pointy你指的是什麼?我只提到你*不能*定義兩個具有相同名稱的函數(不管瀏覽器或嚴格性),並且你*可以*創建一個匿名函數(不管瀏覽器或嚴格性)。 – IMSoP

+0

@Pointy我添加了一個句子,澄清我認爲語法的合法性無關緊要,因爲無論如何這種做法都是錯誤的。 – IMSoP

相關問題