2015-03-22 2 views
0

Я вычисляю строку и столбец заданной точки функцией javascript.
Для достижения этой цели я должен объявить глобальные переменныеМожем ли мы передавать переменные по ссылке в функции JavaScript?

var global_row; 
var global_col; 

Здесь функция тела

function calculate_city_row_col(cur_city_id) 
{ 
    var r = 565; 
    var c = 1; 
    var max_city_id = 159895; 
    do{ 
     if((r%2) == 0) c++; 
     max_city_id -= r; 
     r--; 
    } 
    while(cur_city_id <= max_city_id) 

    //Saving Result in seperate row and column 
    global_row = r + 1;         //Global Variable 
    global_col = c + (cur_city_id - (max_city_id + 1)); //Global Variable 
} 

Здесь вызов функции

var city_id = 1244; 
calculate_city_row_col(city_id); 
var city_row = global_row; 
var city_col = global_col; 

Есть в любом случае непосредственно передать локальные переменные? (Без использования глобальных переменных)
как этот

calculate_city_row_col(cur_city_id, city_row_ref, city_col_ref); 

ответ

2

Просто возвращают объект:

function calculate_city_row_col(cur_city_id) 
{ 
    var r = 565; 
    var c = 1; 
    var max_city_id = 159895; 
    do{ 
     if((r%2) == 0) c++; 
     max_city_id -= r; 
     r--; 
    } 
    while(cur_city_id <= max_city_id) 

    return { 
     row: r + 1, 
     col: c + (cur_city_id - (max_city_id + 1)) 
    }; 
} 

var rowAndCol = calculate_city_row_col(1244); 
var city_row = rowAndCol.row; 
var city_col = rowAndCol.col; 
1

Можно ли передать переменные по ссылке в JavaScript Функция

No. JavaScript является чисто pass-by-value (значение, переданное при прохождении объекта вокруг объекта, является ссылкой объекта , но это все еще значение).

варианты:

  1. Есть функция возвращает объект (или массив)

    function calculate_city_row_col(cur_city_id) 
    { 
        var r = 565; 
        var c = 1; 
        var max_city_id = 159895; 
        do{ 
         if((r%2) == 0) c++; 
         max_city_id -= r; 
         r--; 
        } 
        while(cur_city_id <= max_city_id) 
    
        //Saving Result in seperate row and column 
        return { 
         row: r + 1, 
         col: c + (cur_city_id - (max_city_id + 1)) 
        }; 
    } 
    

    Использование:

    var result = calculate_city_row_col(someCityId); 
    console.log(result.row); 
    console.log(result.col); 
    
  2. ли функция принимает ссылку на объект (или массив), который он обновляет

    function calculate_city_row_col(cur_city_id, result) 
    { 
        var r = 565; 
        var c = 1; 
        var max_city_id = 159895; 
        do{ 
         if((r%2) == 0) c++; 
         max_city_id -= r; 
         r--; 
        } 
        while(cur_city_id <= max_city_id) 
    
        //Saving Result in seperate row and column 
        result.row = r + 1; 
        result.col = c + (cur_city_id - (max_city_id + 1)); 
    } 
    

    Использование:

    var result = {}; 
    calculate_city_row_col(someCityId); 
    console.log(result.row); 
    console.log(result.col); 
    

Запрещая вескую причину, чтобы пойти с # 2 в конкретной ситуации, # 1, как правило, самый лучший вариант. Например, если вы вызывали эту функцию тысячи раз в узком цикле, то мог бы быть оправданием для повторного использования одного объекта (путем передачи его) вместо создания нового объекта каждый раз.

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