我有4个功能:function1
,function2
,function3
,function4
。
现在,正在计算前3个函数中的每个函数的值。我想将这3个值存储在全局数组中,并在第4个函数中使用它。
以下方法是否正确?
var array1=[]
function1(){
array1[0]=calculated value1;
}
function2(){
array1[1]=calculated value2;
}
function3(){
array1[2]=calculated value3;
}
此数组将用于第4个函数。
答案 0 :(得分:1)
不,我不建议这样做。
<强>更新强>: 基于您作为对另一个答案的评论而写的信息,我猜您的不同函数用于根据用户输入计算某些值。
如果你真的想要在全局变量中缓存这些值,我仍然会建议你使用一个带有命名成员的对象,因为它在读取和试图理解代码时通常比数字索引更有意义:
var myGlobalObject={};
function one(){
myGlobalObject.nameOfValueOne = calculated value1;
}
如果在绘制它时需要它作为数组,则可以创建该数组:
myPlotFunction( [ myGlobalObject.nameOfValueOne, myGlobalObject.nameOfValueTwo] );
但是如果命名值没有意义,就像用户可以添加可变数量的值一样,那么你应该使用一个数组,并且可能使用myArray.push(value)
。
答案 1 :(得分:1)
除非它非常非常必要,否则不要使用全局变量。如果你真的想要使用它,尝试使用闭包只是为了确保你不填充全局范围,同时使你的变量和函数私有,所以其他全局变量和具有相同名称的函数不会相互影响。
尝试在闭包中包装现有代码。这样我认为你现有的代码一点都不差。并且您的全局变量在闭包块中是全局变量。
(function($){
//.. your existing code.
})(jQuery)
注意:所有变量和函数仅在闭包块中可用。
答案 2 :(得分: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
所以现在每个函数都存储它自己的最后一个结果,你可以在其他函数中使用它。
答案 3 :(得分: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]