2015-04-14 32 views
0

这是我现在为我的代码收到的唯一错误。'setTimeout'在被定义之前使用了

'setTimeout'在它被定义之前被使用。

它的发生是由于该行:

setTimeout("a()"); 

我应该做些什么才能通过验证?这是我的全码:

/*global document, window */ 
function checkTime(i) { 
    'use strict'; 
    if (i < 10) { 
     i = "0" + i; 
    } 
    return i; 
} 
function a() { 
    'use strict'; 
    var oct = ["0", "1", "2", "3", "4", "5", "6", "7"], 
     octtime, 
     oct1, 
     oct2, 
     oct3, 
     oct4, 
     oct5, 
     oct6, 
     octvalue, 
     point = ".", 
     now = new Date(), 
     hours = now.getHours(), 
     minutes = now.getMinutes(), 
     seconds = now.getSeconds(), 
     h = checkTime(hours), 
     m = checkTime(minutes), 
     s = checkTime(seconds), 
     totsecs = [hours * 3600 + minutes * 60 + seconds + (now.getTime() % 1000)/1000]; 
    octtime = Math.floor(totsecs/(86400/262144)); 
    oct1 = Math.floor(octtime/32768); 
    octtime -= 32768 * oct1; 
    oct2 = Math.floor(octtime/4096); 
    octtime -= 4096 * oct2; 
    oct3 = Math.floor(octtime/512); 
    octtime -= 512 * oct3; 
    oct4 = Math.floor(octtime/64); 
    octtime -= 64 * oct4; 
    oct5 = Math.floor(octtime/8); 
    octtime -= 8 * oct5; 
    oct6 = octtime; 
    octvalue = point + oct[oct1] + oct[oct2] + oct[oct3] + oct[oct4] + oct[oct5] + oct[oct6]; 
    document.getElementById('a').innerHTML = h + ":" + m + ":" + s; 
    document.getElementById('b').innerHTML = octvalue; 
    setTimeout("a()"); 
} 
window.onload = a; 
+0

前缀http://codebeautify.org/jsval idate。 – jamiestroud69

+0

没有人打算解释*为什么*代码失败:在“a()”中使用括号与*立即调用函数*相同,然后将调用'a()'的返回值传递给setTimeout。你只需要''''''或者更好的'setTimeout(a)'。 –

回答

1

我认为你可以用这种方法试试,你已经有这个正确的路线

/*global document, window */ 

刚调用setTimeout与我用这个的window

window.setTimeout(a); 
+0

这工作!谢谢! – jamiestroud69

+0

高兴地帮助你:) – faby

2

如果你的浏览器环境中发展 - 它声明:set the environment代替:

/*jslint browser: true, devel: true */ 

这将使浏览器中的一切 - 这样就可以把窗口/全局文件也是如此。

当你在它,通过它的功能,而不是字符串

setTimeout(a); // and not "a()" 
+0

不是。不会工作,因为该功能尚未定义并在全球范围内注册。仍然有最后一个括号来分析,setTimeout会对它进行比赛。 – Tschallacka

+0

@MichaelDibbets不,这不是浏览器的工作方式。 _course_你可以在里面调用'a' - 这只是递归。 –

+0

@BenjaminGruenbaum我已经尝试过了。它导致: 隐含的eval是邪恶的。传递函数而不是字符串。 setTimeout(“a()”,50); – jamiestroud69

相关问题