循环中的变量声明

Variable declaring within looping

本文关键字:声明 变量 循环      更新时间:2023-09-26

我在做函数时遇到了变量问题。这只是一个愚蠢的例子。在我的代码中,我有很多变量想要在函数中使用,所以我不必为每个变量"ex1、ex2 等"一遍又一遍地编写函数。下面是我想做的非常简单的事情。首先检查"ex1",它等于声明的值,然后执行操作(真实代码中的动画)。然后对"ex2"执行相同的操作,依此类推。有没有简单的方法可以做到这一点?

<script>
var ex1 = 'frog'; //Those are not set manually. ID's in real code
var ex2 = 'pig';
var ex3 = 'horse';
var ex4 = 'bird';
var x = 0;
setInterval("call", 5000);
function call(){
    x++;
    if(('ex' + x) == 'frog'){
    //action a
    }
    else if(('ex' + x) == 'pig'){
    //action b
    }
    else if(('ex' + x) == 'horse'){
    //action c 
    }
    else if(('ex' + x) == 'bird'){
    //action d
    }
}
</script>

全局变量是window对象的属性(无论如何在浏览器中)。可以使用方括号表示法访问属性,如下所示:

var ex1 = 'frog'; //Those are not set manually. ID's in real code
var ex2 = 'pig';
var ex3 = 'horse';
var ex4 = 'bird';
var x = 0;
function call(){
    x++;
    if(window['ex' + x] === 'frog'){
    //action a
    }
    else if(window['ex' + x] === 'pig'){
    //action b
    }
    else if(window['ex' + x] === 'horse'){
    //action c 
    }
    else if(window['ex' + x] === 'bird'){
    //action d
    }
}
setInterval(call, 5000);

但是,在这里ex数组可能会更好:

var ex = [];
ex[1] = 'frog'; //Those are not set manually. ID's in real code
ex[2] = 'pig';
ex[3] = 'horse';
ex[4] = 'bird';
var x = 0;
function call(){
    x++;
    if(ex[x] === 'frog'){
    //action a
    }
    else if(ex[x] === 'pig'){
    //action b
    }
    else if(ex[x] === 'horse'){
    //action c 
    }
    else if(ex[x] === 'bird'){
    //action d
    }
}
setInterval(call, 5000);

如果要对大量字符串执行此操作,请使用 switch 语句:

var ex = [];
ex[1] = 'frog'; //Those are not set manually. ID's in real code
ex[2] = 'pig';
ex[3] = 'horse';
ex[4] = 'bird';
var x = 0;
function call(){
    x++;
    switch(ex[x]) {
       case 'frog':
           //action a
           break;
       case 'pig':
           //action b
           break;
       case 'horse':
           //action c
           break;
       case 'bird':
           //action d
           break;
    }
}
setInterval(call, 5000);

此外,关于 ifs,更优雅的方法是拥有一个包含所有操作的对象,如下所示:

var actions = {
  frog:function(){
  //action a
  },
  pig:function(){
    //action b
  }
}

然后只需在对象中找到操作并在找到时调用它

var action = actions['ex' + x]
if (action) {
  action();
}