鍍金池/ 問答/HTML/ setTimeout第一個參數(shù)不加引號造成內(nèi)存溢出

setTimeout第一個參數(shù)不加引號造成內(nèi)存溢出

網(wǎng)頁顯示在線時間:`

    var timeblc = document.getElementById('nowtime');
    var weekdays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
    function addZero(t){
        if(t<10) return '0'+t;
        return t;
    }
    function showTime(){
        var time = new Date();
        var t = time.getFullYear()+'年'+getMonthDay(time)+getWeekday(time)+getHMS(time);
        timeblc.innerHTML = t;
        setTimeout('showTime()',1000);      //這里??!
    }
    function getMonthDay(time){
        var m = addZero(time.getMonth()+1);
        var d = addZero(time.getDate());
        var str = m+'月'+d+'日';
        return str;
    }
    function getWeekday(time){
        var str = weekdays[time.getDay()];
        return str;
    }
    function getHMS(time){
        var h = addZero(time.getHours());
        var m = addZero(time.getMinutes());
        var s = addZero(time.getSeconds());
        var str = h+':'+m+':'+s;
        return str;
    }
    showTime();`

代碼注釋處,第一個參數(shù)若不添加引號則引發(fā)內(nèi)存溢出:
圖片描述

網(wǎng)上查過,可知加引號則會在全局內(nèi)尋找,不加則是在局部變量尋找,然而沒找到有關(guān)溢出和查詢變量方式的關(guān)系。

求教!

回答
編輯回答
司令

setTimeout第一個參數(shù)應(yīng)該傳入的是即將執(zhí)行的函數(shù)

setTimeout(showTime, 1000);
2017年1月19日 18:54
編輯回答
柚稚

沒加引號就直接執(zhí)行函數(shù)showTime了……造成遞歸死循環(huán),setTimeout函數(shù)調(diào)用寫法有:

  1. setTimeout(fn, timeout)
  2. setTimeout('fn()', timeout)
2018年8月16日 16:01