浏览器在某些Javascript文件上不断崩溃

浏览器在某些Javascript文件上不断崩溃,javascript,jquery,date,browser,Javascript,Jquery,Date,Browser,首先,很抱歉英语不好,因为它不是我的主要语言 我在使用Javascript时遇到了一些问题。几分钟后,某个文件不断破坏我的浏览器(无论是Chrome、Firefox还是IE) $().ready(function() { timeAgo(); }); function timeAgo() { $('time.time-ago').each(function() { //Get datetime from the attribute var ago = $(this).a

首先,很抱歉英语不好,因为它不是我的主要语言

我在使用Javascript时遇到了一些问题。几分钟后,某个文件不断破坏我的浏览器(无论是Chrome、Firefox还是IE)

$().ready(function() {
timeAgo();
});

function timeAgo() {
    $('time.time-ago').each(function() {
    //Get datetime from the attribute
    var ago = $(this).attr('datetime');

    //Split it so we can convert it to a Date object as Firefox doesn't allow raw input
    var spl = ago.split(' ');

    var date = spl[0].split('-');

    var time = spl[1].split(':');

    //Convert to object
    ago = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);

    //Get current date
    var now = new Date();

    //Calculate difference in days
    var days = dayYear(now) - dayYear(ago);

    if(days < 0) days += 365;

    var out = '';

    //Get the propper string
    if(days > 0) {
        if(days == 1) {
            out = 'Gisteren';
        }else if(days < 7) {
            out = days +' dagen geleden';
        }else if(days < 14) {
            out = 'Een week geleden';
        }else{
            out = ago.toLocaleDateString('nl-nl',{day: "numeric",month: "short",year: "numeric"});
        }
    }else{
        var dif = Math.round((now - ago)/1000);
        if(dif < 10) {
            out = 'Zojuist';
        }else if(dif < 60) {
            out = 'Enkele seconden geleden';
        }else if(dif < 120) {
            out = 'Een minuut geleden';
        }else if(dif < 60 * 60) {
            out = Math.floor(dif/60)+' minuten geleden';
        }else if(dif < 60 * 60 * 2) {
            out = 'Een uur geleden';
        }else{
            out = Math.floor(dif/60/60)+' uur geleden';
        }
    }
    $(this).html(out);
});
setInterval(function(){timeAgo()},10000);
}

function dayYear(now) {
var first = new Date(now.getFullYear(),0,1);
var day = Math.round(((now - first) / 1000 / 60 / 60 /24) + 0.5);
return day;
}
$().ready(函数()){
时间();
});
函数timeAgo(){
$('time.time ago')。每个(函数(){
//从属性中获取datetime
var ago=$(this.attr('datetime');
//拆分它,以便我们可以将其转换为日期对象,因为Firefox不允许原始输入
var spl=前分割(“”);
var date=spl[0]。拆分('-');
var-time=spl[1]。拆分(“:”);
//转换为对象
ago=新日期(日期[0],日期[1]-1,日期[2],时间[0],时间[1],时间[2]);
//获取当前日期
var now=新日期();
//以天计算差额
var天数=日年(现在)-日年(以前);
如果(天<0)天+=365;
var out='';
//取支撑绳
如果(天数>0){
如果(天数==1){
out='Gisteren';
}否则,如果(天数<7天){
out=天+达根·格莱登;
}否则,如果(天数<14天){
out='Een week geleden';
}否则{
out=ago.toLocaleDateString('nl-nl',{day:“numeric”,month:“short”,year:“numeric”});
}
}否则{
var dif=数学轮((现在-以前)/1000);
如果(dif<10){
out=‘Zojuist’;
}否则如果(dif<60){
out='Enkele seconden geleden';
}否则如果(dif<120){
out='Een minut geleden';
}否则如果(dif<60*60){
out=数学楼层(dif/60)+“分钟geleden”;
}否则如果(dif<60*60*2){
out='Een uur geleden';
}否则{
out=数学楼层(dif/60/60)+“uur geleden”;
}
}
$(this).html(out);
});
setInterval(函数(){timeAgo()},10000);
}
功能日年(现在){
var first=新日期(现在是.getFullYear(),0,1);
var day=数学轮((现在为第一轮)/1000/60/60/24)+0.5);
回归日;
}
例如,我用下面的代码来调用它

<time datetime="2013-05-12 19:12:15"></time>


提前感谢。

原因是您在每个循环中不断调用
setInterval

您应该改用
setTimeout
(或者只调用
setInterval
一次)

不同之处在于,
setInterval
每x毫秒执行一次给定的。
setTimeout
在x毫秒(一次)后执行给定代码


由于在
timeAgo
方法中调用
setInterval
,过一段时间后,您将运行大量计时器,所有新计时器和计时器的数量都将以指数形式增长,最终导致崩溃。

原因是您在每个循环中不断调用
setInterval

您应该改用
setTimeout
(或者只调用
setInterval
一次)

不同之处在于,
setInterval
每x毫秒执行一次给定的。
setTimeout
在x毫秒(一次)后执行给定代码


由于在
timeAgo
方法中调用
setInterval
,过一段时间后,您将运行大量计时器,所有新计时器和计时器的数量将成倍增长,最终导致崩溃。

您确定此文件是罪魁祸首吗?我在Chrome 26上运行了你的代码,没有问题。你说“崩溃”浏览器是什么意思?发生了什么事让你觉得有问题?你确定这个文件是罪魁祸首吗?我在Chrome 26上运行了你的代码,没有问题。你说“崩溃”浏览器是什么意思?发生了什么事让你觉得出了问题?+1就是这样。每10秒运行计时器的数量呈指数级增长。每10秒运行计时器的数量呈指数级增长。