2014-12-05 52 views
-1

我正在學習JavaScript,根本沒有編程背景。在這個例子中,我想我明白foo是一個未聲明的(全局)變量,當bar被計算時,它是不存在的,所以bar =(undefined + 1)或者NaN。測試代碼中是否定義了未聲明的變量是否合理?

var bar = foo + 1, 
    foo = 1; 

比方說,這是一個很長的一堆代碼的結束。如果foo先前已被定義並且foo = 1會如何重新設置foo的值呢?測試它有意義嗎?我想我打開一個蠕蟲的範圍....(「範圍?你不能haaaandle範圍!」)

我非常感謝你的耐心等待我的學習曲線!任何答案,你可以在短語或類似的比喻,將有助於我取得此我帶....

+0

這可能只是我,但我不明白你問:是你能改一下你的問題嗎? – Deleteman 2014-12-05 18:42:53

+0

這是更可能*主觀的概念問題。*話雖這麼說,我是周圍的*這是好的一個節目打破事實上的工作組程序員的一部分。*如果'foo'是永遠打算是未定義的,檢查它是否是NaN是多餘的,因爲當它是NaN時,程序流失敗。 – Compass 2014-12-05 18:43:44

+0

我也不明白。 「?*如果有富了先前定義和富= 1旨在重新foo的值是否有意義,以測試它*?」 - 你想重置'foo'的價值?如果是這樣,那就做吧。如果你不這樣做,不要這樣做。恐怕我無法看清你問題的核心。這似乎與'bar'與'foo'的關係有關,但我不確定。 – apsillers 2014-12-05 18:45:23

回答

0

可以測試和使用OR運算符尚未宣佈聲明||

foo = foo || 1; 

所以如果foo存在,foo將是foo。如果富不存在,foo將是1

+1

小心,因爲如果foo == 0 foo將被設置爲1,即使foo聲明並且有一個值。 – Deleteman 2014-12-05 18:46:11

+0

很棒。我實際上只用過這個對象,而不是可能遭受類型轉換的基元。 – wwwmarty 2014-12-05 18:49:45

0

不一定,雖然這取決於上下文。你正在聲明新的變量。所以,你是對的,如果foo不在範圍存在,bar將爲NaN。但是,如果代碼在本地範圍內運行,foo將不會覆蓋全局foo。

下段顯示了這一點:bar爲NaN兩個時代,但當地foo是可以獲得價值2,不會改變全球foo,保持價值1的價值。

var bar = foo + 1, 
 
    foo = 1; 
 

 
document.write('global bar = ' + bar + '<br>'); 
 
document.write('global foo = ' + foo + '<br>'); 
 

 

 
(function() { 
 
    var bar = foo + 1, 
 
     foo = 2; 
 

 
    document.write('local bar = ' + bar + '<br>'); 
 
    document.write('local foo = ' + foo + '<br>'); 
 
    
 
}()); 
 

 
document.write('global foo = ' + foo + '<br>');

輸出:

全球巴= NaN的
全球富= 1
本地巴= NaN的
本地富= 2
全球富= 1

相關問題