2013-01-16 84 views
2
function ReplaceContentInContainer(matchClass,content) 
    { 
    var elems = document.getElementsByTagName('*'), i; 
    for (i in elems) 
     { 
     if((" "+elems[i].className+" ").indexOf(" "+matchClass+" ") > -1) 
      { 
      elems[i].innerHTML = content; 
      } 
     } 
    } 

變量賦值後,我試圖找出逗號確實在變量賦值('*'), i; 和這意味着什麼在for (i in e)循環什麼。逗號在Javascript

我最好的猜測是e被分配給文檔節點中的所有元素以及i。那麼這是否意味着i是數組e(它是一個數組?)的數量還是引用數?

編輯: 好的。它只是實例化變量(i),然後ifor循環中計數對象elem中的所有元素。

回答

5

這只是分開聲明。

var elems = document.getElementsByTagName('*'), i; 

相同

var elems = document.getElementsByTagName('*'); 
var i; 

一個更加簡潔,另一種可能被視爲更具有可讀性。

在您的確切情況下,你也可以使用

var elems = document.getElementsByTagName('*'); 
for (var i in elems) 

這將是,在我看來,最好的爲i的目的將是很明顯的。

由於變量的範圍是函數(或全局)而不是塊,因此它將完全相同。

+3

+1您指出更好的語法 – georg

2

該逗號是因爲您在本地範圍內定義變量i,它只是var語句的一部分。如果沒有逗號i將是一個全球性的。

你的說法是一樣的:

var elems = document.getElementsByTagName('*'); 
var i; 

如果您使用的工具爲你的代碼的質量,像JSLint的例如靜態分析,它會迫使你寫:

var elems = document.getElementsByTagName('*'), 
    i; 

在幾個方面的原因:

  1. 您可以定義兩個變量(所以你不必全局)
  2. 您沒有額外的var(您少寫...:-))
  3. 你的代碼比一個行版本
  4. 你定義在它是比閱讀更容易在同一個地方的所有變量更具有可讀性:

    爲(VAR我在elems的){ //做一些 }

有Perl中類似的概念,例如:

my ($var1, $var2); 

在JavaScript中它是相同的,但不需要將變量放在列表中。

1

ivar聲明的一部分..所以它只是創造一個新的變量... 你的代碼是一樣的

var elements=document.getElementsByTagName('*'); 
var i;