2012-05-18 2 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 обновил его. и ОП не упоминал о коде, живущем в глобальном масштабе. Он может жить в другой функции или в закрытии. – Joseph

1

Вы не можете, потому что вы объявляете A локально в calcDet

Один способ заключается в объявлении 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

Смежные вопросы