2016-03-06 3 views
0

У меня есть 4 функции: function1, function2, function3, function4.javascript: сохранение нескольких переменных в массиве

Теперь значение вычисляется в каждой из первых трех функций. Я хочу сохранить эти 3 значения в глобальном массиве и использовать его в 4-й функции.

Правильно ли подходит следующий подход?

var array1=[] 

function1(){ 
array1[0]=calculated value1; 
} 

function2(){ 
array1[1]=calculated value2; 
} 

function3(){ 
array1[2]=calculated value3; 
} 

Этот массив будет использоваться в 4-й функции.

+0

Есть ли у вас какие-либо вопросы или вы просто просят для * лучше * способ делать вещи? –

+0

Dang! Мои извинения !! Да. Поэтому я хочу подтвердить, правильный ли мой подход. и если есть лучший способ сделать это? – Cerberus

ответ

1

Нет, я бы не рекомендовал делать это так.

Update: Основываясь на информации, которую вы написали в качестве комментария к другому ответу, я думаю, что ваши различные функции используются для вычисления некоторого значения на основе пользовательского ввода.

Если вы действительно хотите кэшировать значения в глобальной переменной, я бы по-прежнему предлагал вам использовать объект с именованными членами, поскольку он обычно имеет смысл, чем числовой индекс при чтении и попытке понять код:

var myGlobalObject={}; 

function one(){ 
    myGlobalObject.nameOfValueOne = calculated value1; 
} 

Если вам это нужно, как массив, когда вы его сюжет, ваш может создать этот массив:

myPlotFunction([ myGlobalObject.nameOfValueOne, myGlobalObject.nameOfValueTwo]); 

Но если это не имеет смысла называть значения, например, если пользователь может добавить переменное количество значений, тогда вы должны использовать массив и, вероятно, использовать myArray.push(value).

+0

его функции ничего не возвращают !! –

+0

Созданный массив используется как набор данных для создания гистограммы в d3. Я не смогу использовать объект в этом случае. Он должен быть в массиве. – Cerberus

+0

@Reddy Я знаю, что псевдокод не имел операторов возврата. Цербер даже не писал, что результаты следует добавить. Я хотел знать, почему наиболее распространенный подход не использовался. – some

1

НЕ используйте глобальные переменные, если это не очень важно. И если вы действительно хотите его использовать, попробуйте использовать блокировки, чтобы убедиться, что вы не заполняете глобальную область. Также, чтобы ваши переменные и функции были приватными, что другая глобальная переменная и функции с тем же именем не влияют друг на друга.

Попробуйте обернуть свой существующий код в закрытии. Таким образом, я думаю, что ваш существующий код неплохой. И ваша глобальная переменная является глобальной в блоке закрытия.

(function($){ 
    //.. your existing code. 
})(jQuery) 

Примечание: Все переменные и функции доступны с только закрывающего блока.

+1

Звучит неплохо! Я не думал об этом.! спасибо. :) – Cerberus

+0

Что с jQuery делать с этим ???? – some

+0

Поскольку он сказал d3-графики, он должен обязательно использовать JQuery. :) –

1

Поскольку функции являются объектами первого класса в JavaScript, вы можете сделать некоторые Hacky вещи как этот

var i = 0; 
var fa = function() { 
    fa.result = "result_" + i; 
    i += 1; 
}; 

console.log(fa.result); // prints undefined 

// now call fa 
fa(); 

console.log(fa.result); // prints result_0 


// now call fa again 
fa(); 

console.log(fa.result); // prints result_1 

Так что теперь каждая функция сохраняет свой собственный последний результат, который вы можете использовать в других функциях.

0

Вот еще один ответ, связанный со сценарием D3.js, наслаждаться

// create a datastructure to hold your array like this 
var ArrayHolder = function() { 
    var _array = [null, null, null]; 
    var __nameIndexMap__ = { 
    "A": 0, 
    "B": 1, 
    "C": 2 
    }; 
    Object.defineProperty(this, 'setData', { 
    value: function(name, value) { 
     var index = __nameIndexMap__[name]; 
     if (index >= 0) { 
     _array[index] = value; 
     } 
    } 
    }); 
    Object.defineProperty(this, 'array', { 
    get: function() { 
     return _array; 
    } 
    }); 
}; 

var myArray = new ArrayHolder(); 


console.log(myArray.array); // prints [null, null, null] 

var i = 0; 

function a() { 
    // provide each function a name 
    var __name__ = "A"; 
    myArray.setData(__name__, i++); 
} 

a(); 

console.log(myArray.array); // prints [0, null, null] 

function b() { 
    var __name__ = "B"; 
    myArray.setData(__name__, i++); 
} 

b(); 

console.log(myArray.array); // prints [0, 1, null] 

function c() { 
    var __name__ = "C"; 
    myArray.setData(__name__, i++); 
} 

c(); 
console.log(myArray.array); // prints [0, 1, 2] 


a(); 
console.log(myArray.array); // prints [3, 1, 2] 
Смежные вопросы