setInterval里调用函数后setInterval只执行一次的原因和解决办法

今天用原生js写一个打飞机的小demo的时候发现的,之前可能遇到过到时一直也没有写下原因。
下面是我的代码:

    // 随机降落目标封装
    function dr() {
        var foe = document.createElement("div")
        foe.setAttribute("class", "foe")
        foe.style.left = Math.random() * 950 + "px"
        body.appendChild(foe)
        setTimeout(() => {
            body.removeChild(foe)
        }, 3000);
    }
     var p = setInterval(dr(), 1000);

声明的函数内容请忽略,,打开页面发现当执行setInterval(dr(),2000)这条代码的时候,dr()这个函数只执行一次,这个是什么原因?我明明用的是永久定时器啊…
控制台检查后得知原因在于:计时器中参数问题,var p = setInterval(p(),1000) 中第一个参数此时添加的值是函数的返回值,因为p()中没有返回值,所以才出问题

解决办法:

办法1.函数名不加括号:

    var p = setInterval(dr, 1000);

办法2.或者在执行的函数用引号括起来:

    var dr = setInterval("dr()", 1000);

这样问题就解决了~~

你可能感兴趣的:(setInterval里调用函数后setInterval只执行一次的原因和解决办法)