setTimeout第一个参数不加引号造成内存溢出

网页显示在线时间:`


    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();`

代码注释处,第一个参数若不添加引号则引发内存溢出:

https://img.mukewang.com/5caea2ed0001c9c003700163.jpg

网上查过,可知加引号则会在全局内寻找,不加则是在局部变量寻找,然而没找到有关溢出和查询变量方式的关系。

求教!


aluckdog
浏览 748回答 2
2回答

慕丝7291255

setTimeout第一个参数应该传入的是即将执行的函数setTimeout(showTime,&nbsp;1000);

HUH函数

没加引号就直接执行函数showTime了……造成递归死循环,setTimeout函数调用写法有:setTimeout(fn, timeout)setTimeout('fn()', timeout)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript