搜尋

首頁  >  問答  >  主體

javascript - 定時器 匿名函數的問題

var a = 0;
function fn(){
    ssss.call(null,a)
    // 为什么 定时器里面的匿名函数加上字符串跟直接执行不同???
    setInterval("ssss()", 1000);    
    setInterval(ssss(), 1000);
}
function ssss(){
    console.log(++a)
}
fn();

請大神麻煩講解一下 裡面的原理

高洛峰高洛峰2831 天前467

全部回覆(3)我來回復

  • 阿神

    阿神2017-05-19 10:38:56

    setInterval第一個參數接受字串,會把字串解析成函數語句執行。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-19 10:38:56

    首先我們看下W3C 的解釋setInterval

    再看下

    1. setInterval("ssss()", 1000);

    2. setInterval(ssss(), 1000);

    1.那麼執行的時候 就會報錯了;
    2.函數本體 ssss()

    function ssss(){
        console.log(++a)
    }

    是沒有回傳值的 , 但是 注意 在fn 函數中有一句 ssss.call(null,a) 那麼 在fn 函數中就存在了回傳值了。而且回傳值 剛好 還是個函數 , 因此 符合setInterval 的函數要求, 會一直執行下去

    回覆
    0
  • 某草草

    某草草2017-05-19 10:38:56

    不加雙引號的話,就要去掉圓括號,只寫函數名稱

    回覆
    0
  • 取消回覆