2012-03-03 159 views
0

我要做到以下幾點:如何在使用JavaScript之前定義一個變量?

if (htmlEdit) { 
    var dialogDiv = $('#commonDialog'); 
} else { 
    var dialogDiv = $('#commonDialog2'); 
} 

但如果我這樣做,我認爲dialogDiv不會可用外的if-else。我如何聲明它,以便在if-else之後能夠在另一個地方使用它?

+0

「如果」不會創建一個閉包 – charlietfl 2012-03-03 06:42:47

+0

你的變量範圍內這個JS妄談它作爲格洛巴 – 2012-03-03 06:44:28

回答

3

你可以像這樣,

var dialogDiv; 
if (htmlEdit) { 
    dialogDiv = $('#commonDialog'); 
} else { 
    dialogDiv = $('#commonDialog2'); 
} 

這裏是一個很好的教程,
http://www.webdevelopersnotes.com/tutorials/javascript/global_local_variables_scope_javascript.php3

+0

您的變量範圍內這個JS妄談它作爲全球 – 2012-03-03 06:44:09

+1

這得到我的投票,因爲這是正確的基本這樣做的方式。但值得一提的是,一旦你脫離了學習JS的初始階段,你應該避免「全球命名空間污染」。有很多關於如何「命名空間」你的JS的文章。 – 2012-03-03 07:04:56

+0

他的回答沒有任何內容表明這是一個全局變量,我們可以在此處嵌套十幾個函數。 – Sinetheta 2012-03-03 17:42:42

0

充分利用dialogDiv全局變量,所以你可以在你的項目中訪問的任何地方。甚至在你的功能外面和內部。

1

你也可以這樣做

function test() 
{ 
    var dialogDiv; // its use in only test function 
} 

If you want to declare globally than declare in script tag like this. 

<script language="javascript"> 

    var dialogDiv; 

// Do your stuff below 

    function test() 
{ 
      if (htmlEdit) { 
       dialogDiv = $('#commonDialog'); 
     } else { 
      dialogDiv = $('#commonDialog2'); 
     } 
} 
</script> 
1

是的,你一定能訪問它的if語句之外。 Javascript具有函數範圍,這意味着您只需跟隨最近的funciton(){},並且可以訪問裏面的所有變量。 jsfiddle

if (true) { 
    var dialogDiv = 'hi'; 
} else { 
    var dialogDiv = 'bye'; 
} 
alert(dialogDiv)​; //alerts "hi"​​​​​​​​​​​​​​​​ 

實際上,當你在這樣的函數中某處聲明一個變量,它是「申報」在你的範圍的最頂部,並將其值設置在任何你想你「宣佈「它。這被稱爲提升,它沒有得到你的同意或控制,爲什麼在函數頂部聲明所有變量是一個好主意,這樣你就不會忘記你正在對這個級別進行測試。

alert(dialogDiv); //Error because dialogDiv is not defined 
(function(){ 
    alert(dialogDiv); //alerts "undefined" because dialogDiv exists here but has no value yet 
    if (true) { 
     var dialogDiv = 'hi'; 
    } else { 
     var dialogDiv = 'bye'; 
    } 
    alert(dialogDiv); //alerts "hi" 
})() 
+0

我仍然會親自在if..else之外聲明它,即使只是聲明它爲null或空字符串。 – 2012-03-03 07:03:05

+0

@GregPettit是的,這就是爲什麼我說「這是一個好主意,在功能頂部聲明所有變量」 – Sinetheta 2012-03-03 17:41:34

+0

D'oh,對不起,我錯過了那句話! – 2012-03-03 20:49:34

相關問題