使用闭包传递数组值

passing array value using closure

本文关键字:数组 闭包      更新时间:2023-09-26

从另一个函数中获得多个局部数组的最佳方法是什么?我也在做类似的事情。至于附加到函数的变量名,"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);
}

请注意,我给每个变量一个空数组的默认值,否则你会得到未定义的变量。