开发者问题收集

随机数组不起作用?

2014-02-02
43

我正在尝试创建一个简单的 JS,它将获取随机数组并通过 div 容器发布它们。这是我目前所拥有的,现在请记住,我对 JS 非常不擅长。

function timedMsg() {
    currMsg++;
    document.getElementById('timedMsgDiv').innerHTML = msgArr[currMsg % msgArr.length];
};

function init() {
    currMsg = -1;
    msgArr = Array('Computer.', 'Uploading', 'Random');
    timedMsg();
    var t = setInterval("timedMsg()", 50);
};

window.onload = init();

它只获取“计算机”,然后不会随机翻阅它们或循环或做任何事情。有什么原因吗?这是我的 JSFiddle: http://jsfiddle.net/R8SYf/

2个回答

将函数名称传递给 setInterval() ,如下所示:

var t = setInterval(timedMsg, 2000);

http://jsfiddle.net/R8SYf/6/

Niklas
2014-02-02

您的代码中存在一些问题:

1) 当您将字符串传递给 setInterval 时,您会触发 eval ,并且您的函数在全局上下文中运行,您不希望出现这种情况。要修复此问题,只需将引用传递给该函数;请记住,函数也是对象:

var t = setInterval(timedMsg, 2000);

2) window.load 事件需要一个函数,但您正在分配 init 函数的返回值,该值是 undefined 。与上述情况一样,您需要传递一个函数对象,而不是执行该函数:

window.onload = init;

3) 您的 fiddle 设置为在 onLoad 事件中加载代码,但您正在分配自己的函数。您需要将行为更改为 No wrap - in <head>

4) 虽然有效,但使用 Array 构造函数创建数组并不是好习惯。只需使用文字语法:

msgArr = ['Computer.', 'Uploading', 'Random'];

已修复 http://jsfiddle.net/R8SYf/11/

elclanrs
2014-02-02