为什么我的阵列会调用其中的所有内容?

时间:2017-11-02 00:03:46

标签: javascript arrays node.js variables

我希望数组从它调用一个随机变量,但它调用其中的每个变量,我不知道为什么。 代码:

var atk1 = Billy.giveLife("self");
var atk2 = Billy.punch("self");
var attack = [atk1,atk2];
function test(){
    var r = Math.round(Math.random()*(attack.length-1));
    attack[r];
}
test();

2 个答案:

答案 0 :(得分:3)

在前2行,您将立即调用这些函数。 attack[r]不执行任何操作,方括号仅用于从数组中选择元素。

以下是您可能尝试做的一个解决方案,使用匿名箭头函数存储您稍后要调用的函数:

var atk1 = () => Billy.giveLife("self");
var atk2 = () => Billy.punch("self");
var attack = [atk1,atk2];
function test(){
    var r = Math.round(Math.random()*(attack.length-1));
    attack[r]();
}
test();

答案 1 :(得分:1)

好的,我认为你缺少大括号'()'所以我为你做了一个原型,这里是:

http://jsfiddle.net/pvkovalev/e75nx3rn/

我修改了你的代码以使其更具视觉效果:

function printf(data) {
  $('#out').html($('#out').html() + '<br/>' + data);
}

var atk1 = function() {
  printf('atk1');
}
var atk2 = function() {
  printf('atk2');
}
var atk3 = function() {
  printf('atk3');
}
var atk4 = function() {
  printf('atk4');
}
var atk5 = function() {
  printf('atk5');
}

var attack = [atk1, atk2, atk3, atk4, atk5];

function test() {
  var r = Math.round(Math.random() * (attack.length - 1));
  attack[r]();
}

setInterval(function() {
  test();
}, 1500)