2012-05-18 49 views
2

我嘗試使用函數讀取數組並在另一個函數中使用它,但第二個函數似乎沒有讀取它。我做錯了什麼?在兩個函數之間傳遞數組值

function calcDet() { 
      var A = [];  //generates the array 
       for (var i = 0; i < k; i++) { 
        A[i] = []; 
        for (var j = 0; j < k; j++) { 
         var id = "A" + (i + 1) + (j + 1);     
         A[i][j] = parseFloat(document.getElementById(id).value);    
        } 
       } 
       alert (A); 
      return (A); 
     } 
     function calcRec() {    
       var s; 
       var det; 
       alert (A) 
     } 
+0

thx所有的答案。我不能聲明變量globaly,因爲它的長度和值取決於用戶輸入。所以我先讀k,然後讀取數組值。我將使用建議的第二種方法(A = calcDet())。它現在可以工作,所以謝謝你一堆 – viktor

回答

1

弗里斯特方式是

function function1() 
{ 
    var valriable1=12; 
    function2(val); 
} 

function function2(val) 
{ 
    var variableoffunction1 = val; 
} 

第二種方式是

var globalvarialbe; 
function function1() 
{ 
    globalvarialbe=12; 
    function2(); 
} 

function function2() 
{ 
    var local = globalvarialbe; 
} 
1

這是因爲JavaScript有一個「功能範圍」。這意味着無論在外面聲明什麼,都可以從外面看到,但從內部可以看到外面的東西。

在你的情況下,你必須聲明函數外的數組。

var A = [] 

function calcDet(){...} 

function calcRec(){ 
    alert(A); 
} 

或調用函數和返回A

function calcDet(){ 
    var A = []; 
    ... 
    return A; 
} 

function calcRec(){ 
    var A = calcDet(); //get A from calcDet 
    alert(A); 
} 
+0

不要使用全局變量。 –

+0

@Truth更新了它。 OP沒有提到生活在全球範圍內的代碼。它可能生活在另一種功能或封閉中。 – Joseph

1

你不能因爲你是在本地calcDet

一種方式宣告A是聲明A功能之外,或者乾脆餵它變成calcRec

var A 
function calcDet() { 
    // code 
} 

function calcRec() { 
    // code 
} 

或(更好)

function calcRec() {    
    var s; 
    var det; 
    alert (calcDet()) 
} 
1

See this link about scope

在函數內部聲明的A變量僅限於該函數的作用域。它會在功能死亡後死亡。您需要將它作爲參數傳遞:

function calcRec(data) {    
     var s; 
     var det; 
     alert (data) 
} 
A = calcDet(); 
calcRec(A); 
2

首先,您的數組未在函數外部聲明。其範圍僅限於功能體。但是隨着函數返回數組,然後嘗試使用它來初始化其他數組中的局部變量。這也將起作用。 或 嘗試聲明它的功能

+1

請勿使用全局數組。 –

+0

我期望比拜古根更好。 –

+0

nw是否完成你的期望frm a byakugan :) – Neji