使用闭包传递数组值
passing array value using closure
从另一个函数中获得多个局部数组的最佳方法是什么?我也在做类似的事情。至于附加到函数的变量名,"arr1=f1()",是否需要将其声明为局部的,"var arr1=f1()"。
<script>
function ArrValues(arr){
var array=arr;
function f1(){
var ID=[];
ID=['grapes','peaches','plums'];
return ID
};
function f2(){
var Nam=[];
Nam=['car','motorcycle','tree'];
return Nam
};
function f3(){
var Num=[];
Num=['200','1000','350'];
return Num
};
if(array=='one' || array=='all'){ arr1=f1()};
if(array=='two' || array=='all'){ var arr2=f2()};
if(array=='three' || array=='all'){ var arr3=f3()};
gotIt(arr1,arr2,arr3)
}
function gotIt(arr1,arr2,arr3){
alert(arr1);
alert(arr2);
alert(arr3);
}
</script>
<div id="one" onclick="ArrValues(this.id)">one</div>
<div id="two" onclick="ArrValues(this.id)">two</div>
<div id="three"onclick="ArrValues(this.id)">three</div>
<div id="all"onclick="ArrValues(this.id)">all</div>
看情况。由于您直接将值传递给gotIt
,因此看起来您不需要全局地使用它们,因此应该在所有这些值上都设置var
。
也就是说,你的代码是相当混乱和有点冗余。试试这个:
function ArrValues(arr) {
var arr1 = arr=='one' || arr=='all' ? ['grapes','peaches','plums'] : [],
arr2 = arr=='two' || arr=='all' ? ['car','motorcycle','tree'] : [],
arr3 = arr=='three' || arr=='all' ? ['200','1000','350'] : [];
gotIt(arr1,arr2,arr3);
}
请注意,我给每个变量一个空数组的默认值,否则你会得到未定义的变量。
相关文章:
- JavaScript闭包和返回数组元素
- 从数组中调用方法和闭包
- 为什么这个 JavaScript 闭包数组保留旧值
- 带有函数参数数组的闭包
- 创建带有回调的动态 JSON 数组(内部闭包问题)
- 使用闭包编译器类型检查数组内容
- 在闭包中公开数组的状态,而不允许从外部对其进行编辑
- MVC3/.net4是否有一种方法可以将JSONified Javascript数组解包为字符串的C#数组
- 数组中jQuery元素的常见JavaScript闭包问题
- 带有节点数组的Javascript闭包
- 实现闭包以将数组索引“携带”到另一个数组
- 使用数组的javascript中的闭包
- 返回数组的闭包
- 谷歌闭包编译器类型注释数组
- 如何在加载后将媒体变量添加到数组时不改变它们.闭包
- 在javascript中创建数组并在闭包内追加值
- 为什么谷歌闭包编译器警告数组的长度
- for循环中的Ajax不会返回数组位置的正确值,尽管闭包绑定了当前值位置的范围
- 使用循环在数组中存储闭包函数
- Javascript数组和闭包