如果我有一對函數都設置局部變量,例如變量i
共用for
循環,而另一個恰好在另一個正在運行時調用,是否有任何命名空間混淆的危險?JavaScript可能會混淆局部變量嗎?
3
A
回答
4
只要你使用var
,像這樣:
for(var i = 0; i < something; i++)
那麼它的地方,你會感覺良好,如果你不使用var
,你有你的手一個全局變量以及潛在的問題。另外,如果for
循環在另一箇中嵌套爲嵌套,則應爲每個循環使用不同的變量名稱。
11
請記住,JavaScript沒有塊範圍,但只有函數範圍。
此外,如果你有嵌套的循環,只會有一個i
變量在下面的例子:
function myFunction() {
for (var i = 0; i < 10; i++) {
for (var i = 0; i < 10; i++) {
// code here will run 10 times instead of 100 times
}
}
// variable i is still accessible from here
}
Douglas Crockford建議var
語句應該是在函數體中第一個語句Code Conventions for the JavaScript Programming Language:
JavaScript沒有塊範圍,因此在塊中定義變量可能會使有其他C語言經驗的程序員感到困惑。定義函數頂部的所有變量。
我覺得他有一個點,你可以在下面的例子中看到,這不會混淆讀者誤以爲變量i
和j
在for
循環塊的範圍內舉行:
function myFunction() {
var i, j; // the scope of the variables is now very clear
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
// code here will run 100 times
}
}
}
0
這將是一個問題,如果你指的是嵌套循環。每次輸入第二個循環時,i的值(以前在外循環中設置)將被重置。
相關問題
- 1. javascript變量全局和局部範圍混淆
- 2. ruby混淆 - 局部變量或instance_method?
- 3. 全局變量和局部變量混淆
- 4. 它可能去混淆JavaScript嗎?
- 5. JavaScript變量定義混淆
- 6. 局部變量,實例變量和符號之間的混淆
- 7. Rails:混淆了將局部變量傳遞給局部變量的語法
- 8. Python中局部和全局變量輸出的混淆
- 9. 變量混淆
- 10. js混淆的全局變量
- 11. python中的全局變量混淆
- 12. 混淆類和全局變量
- 13. 全局變量代碼混淆
- 14. 與分叉和全局變量混淆
- 15. Python中的全局變量混淆
- 16. javascript功能混淆?
- 17. PHP變量混淆
- 18. 用C返回一個局部變量混淆
- 19. 混淆JavaScript的全局變量範圍和更新
- 20. 函數外部變量的混淆
- 21. 函數內部的變量混淆
- 22. JavaScript AJAX傳遞mutltiple變量混淆
- 23. 初級Javascript - 可變範圍混淆
- 24. JavaScript不會返回值,範圍和變量混淆,我認爲?
- 25. python全局變量範圍混淆。什麼是這些變量不可訪問?
- 26. 可以局部變量分配嗎?
- 27. 的Javascript局部和全局變量混亂
- 28. JavaScript vs C#的局部變量性能#
- 29. 由javascript控制檯日誌輸出功能變量混淆
- 30. JavaScript新功能混淆
你的第一個例子不會因爲'var i'被調用兩次而破壞腳本嗎? – 2010-08-30 12:20:59
@Isaac:不,JavaScript會簡單地忽略變量聲明,如果一個變量聲明兩次,如我的第一個例子。顯然,這個循環在這個例子中不會像預期的那樣工作,因爲內部循環會增加外部循環的控制變量。 – 2010-08-30 12:22:30
第一個例子的簡單測試用例證明Daniel是正確的:http://jsfiddle.net/sAg8P/2/ – 2010-08-30 12:47:56