2011-11-10 78 views
1

我使用網上資源,但是我不知道如何得到這個功能的工作學習JavaScript的一個項目。如何陣列/值傳遞給一個Javascript功能

var results =[[a1,a2,a3,a4,a5]]; 
var winner = 0; 

function checkWinner (results) 
{ 
    for (var i = 0; i < results.length; i++) 
    if (results[0][i] > 50) 
    { 
     winner = results[0][i]; 

    } 
} 

就在函數後面,我使用: checkWinner(results);

在HTML文件中,我使用的警報以顯示該變量的贏家。但它顯然不起作用。我意識到這是我對範圍和全局變量的理解的一個問題。

+1

發佈所有的JavaScript代碼。 – arb

+0

你能告訴我們你在哪裏打電話嗎? – SergeS

+1

你是怎麼稱呼這個功能的,你在哪裏打印贏家的價值? – NullUserException

回答

3

應該

var Results =[[a1,a2,a3,a4,a5]]; 
var winner = 0; 

function checkWinner (results) 
{ 
    for (var i = 0; i < results[0].length; i++) 
    if (results[0][i] > 50) 
    { 
     winner = results[0][i]; 

    } 
} 

checkWinner(Results); 

爲了避免名稱衝突的名字從資金情況的全局變量。 同樣在你的代碼中,你調用「父」數組的長度。您需要指定「子」數組的長度

+1

如果您使用全局'勝利者',爲什麼不從結果列表中移除'results'呢? – NullUserException

1

你遍歷result[0]陣列(在result[0]數組),但使用result數組的長度。

1

你得明白的scope概念。變量resultswinner在函數內部和外部都不相同。

另外,如果你想改變的變量值的功能外(除非你使用全局變量),你得通話功能和從它的東西。這對新手程序員來說似乎很難理解,但是僅僅定義一個函數並不會做任何事情。

var results =[[a1,a2,a3,a4,a5]]; 

function checkWinner (results) 
{ 
    for (var result in results[0]) 
    { 
     if (result > 50) 
     { 
      return result; 
     } 
    } 
} 

var winner = checkWinner(results); 

需要注意的是:

  • 我用for each循環,其中有一個更清晰的語法。
  • 我也遍歷results[0]代替results,因爲你已經得到了無論出於何種原因嵌套數組。
  • 因爲你的函數有一個名爲results一個參數,它需要你通過全球results,儘管它是一個全球性的。另一種方式來做到這一點:

var results = [[a1,a2,a3,a4,a5]]; 

function checkWinner() 
{ 
    for (var result in results[0]) 
    { 
     if (result > 50) 
     { 
      winner = result; 
      return; 
     } 
    } 
} 

checkWinner(); 

不過,我會建議不要使用全局變量這種方式。這裏是爲什麼global variables are bad的解釋。它適用於C++,但它也適用於JavaScript。

+0

範圍的變量是功能的問題。例如,如果你正在使用淘汰賽。js然後有一個'viewModel'作爲一個全局變量是很有用的。局部變量作爲參數對於可重用性很有用。一般來說,這是開發人員決定申請。 – Oybek

+0

謝謝你。我使用了您在此處提供的代碼的編輯版本,謝謝。我一直有問題的理解範圍和變量在Javascript中。不過,我到了那裏。已取得進展! – user991735

相關問題