setInterval不带参数调用函数

时间:2016-01-06 04:19:54

标签: javascript html5 setinterval

我试图使用setInterval重复调用一个函数。当我调用一个没有参数的函数时,它可以工作。但是,在使用参数调用函数时,该函数只被调用一次。

Here是js小提琴

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script src="./check.js">

</script>
</body>
</html>

check.js没有参数 - 工作

setInterval(myfun,100)
var mycounter = 0;

function myfun()
{
    console.log(mycounter++)
}

check.js带参数 - 不起作用

setInterval(myfun(0),1000)

function myfun(mycounter)
{
    console.log(mycounter++)
}

3 个答案:

答案 0 :(得分:3)

当您添加括号时,会立即调用该函数,并在间隔中使用返回的结果,在您的情况下,该值是undefined的默认返回值。

你真正做的是

var result = myfun(0); // returns undefined

setInterval(result, 1000); // no go, result is undefined

function myfun(mycounter) {

}

如果你想传递参数,最简单的方法就是使用匿名函数

setInterval(function() {
    myfun(0);
}, 1000);

现代浏览器(不是IE9及以下版本)现在支持直接在setInterval

中传递参数
setInterval(myfun, 1000, 0); // "0" is passed as the first argument to myfun()

当然,只有当变量存在于区间回调函数之外的范围内时,才能增加变量

答案 1 :(得分:1)

...右

setInterval想要的是一个可以调用的函数,

在第一种情况下,您提供的功能

在第二种情况下,您正在调用该函数,然后返回其值

要完成你在第二种情况下要做的事情,你会这样做:

setInterval(function() {myFun(20)}, 1000} 

创建一个NEW函数,将你对myFun的调用包装在里面......理解吗?

现在要记住的另一件事是setInterval 保持永远调用该函数,直到你停止它....所以你可以这样做:

var counter = 20;
setInterval(function() {counter = counter-1; if (counter > 0) myFun()}, 1000)

将每秒调用myFun,直到计数器到期......

但这仍然不完美,间隔将永远保持运行所以你想要的是这样的(它是一个工作的例子,点击底部的运行按钮)

    function nTimes(fn, count, time) {
      var interval = setInterval(function() {
        if (count > 0) {
          count = count - 1;
          fn(count);
        } else {
          clearInterval(interval);
        }
      }, time)
    };


    function myFun(x) {
      $('#output').html($('#output').html() + x + '</br>')
    }
    nTimes(myFun, 20, 1000)
<div id='output'></div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:0)

工作小提琴strict type comparison

if (in_array('test', $people, TRUE))