2017-09-08 149 views
1

我在Javascript類似於下面的代碼的東西:的Javascript範圍

func1() { 
    for(i = 2; i < 5; i ++) { 
     console.log(i); 
     func2(i); 
    } 
} 

func2(x) { 
    for(i = 100; i < 200; i ++) { 
     do something 
    } 
} 

顯然,輸出爲我的這個方案是用2一個單行,但它的工作,如果我例如,將其中一個for循環的索引名稱從i更改爲ii。

這是JavaScript中的預期行爲,我在func1 for循環中實際更改爲100後第一次調用func2?

如果這是真的有什麼辦法解決這個問題,而不是命名每個索引不同?當有很多函數調用嵌套時,這是非常煩人的。

+0

在哪裏'我'宣佈?它的範圍是什麼? –

+0

此代碼中的'i'是全局的(並且這兩個函數都是相同的變量) –

回答

2

你需要做的就是這樣,

func1() { 
    for(var i = 2; i < 5; i ++) { // define i here 
     console.log(i); 
     func2(i); 
    } 
} 

func2(x) { 
    for(var i = 100; i < 200; i ++) { // define i here 
     do something 
    } 
} 

如果聲明爲全局那麼它將最近值,因爲你需要爲每個功能獨特的淡水河谷,你應該函數內聲明

+0

非常感謝!我會在九分鐘限制後接受答案。 – cr001

+0

OP沒有聲明* i *,它只在代碼執行時變成全局的,因爲它沒有被聲明。 ;-) – RobG