好的,这个问题还有几个问题。
首先,我要问的是setTimeout()和setInterval()
我已经看到了几种不同的方式来称呼它们,我想知道哪种方式最适合这种情况..
我正在制作一个js / canvas游戏,我只是查看我的绘制间隔(它会循环绘制方法)
无论如何,这是我见过的不同方式......
A部分:
使用窗口。
drawInterval = window.setInterval(draw, 60);
不使用窗口。
drawInterval = setInterval(draw, 60);
B部分:
不使用函数名称旁边的引号和括号
drawInterval = setInterval(draw, 60);
在函数名称周围使用引号和括号
drawInterval = setInterval("draw()", 60);
因此对于 A部分:我应该使用窗口。或不? 那么window.clearInterval()和clearInterval本身呢?
B部分:我应该使用引号和括号吗?之前我被告知在这种情况下使用引号和括号是个坏主意。
答案 0 :(得分:24)
除非您声明了自己的本地范围setInterval
功能,否则setInterval
和window.setInterval
之间没有区别。
第二种形式使用隐含的eval()
。应尽可能避免这种情况,因为它提供了代码注入的潜力。
答案 1 :(得分:5)
window
是global object。你是否明确地使用它是一种风格问题,但作为一个Python开发人员,我认为明确更好。
如果使用引号,则setInterval()基本上“逐出”该语句。 That's bad。不要使用引号。
答案 2 :(得分:4)
window.setInterval()
和setInterval()
完全相同 - window
部分是隐式的,可以省略。
setTimeout和setInterval都将eval一个字符串,但最佳做法是发送对该函数的引用 - 因此没有引号。
答案 3 :(得分:3)
A部分中的调用是相同的(除非您在某处重新声明其中一个函数)。归结为偏好 - 我更喜欢不使用window
。
对于B部分,选项1肯定是更好的做法。选项2将转到eval
该字符串,并且几乎总是应该避免使用eval
。
答案 4 :(得分:2)
至于为window.
加上前缀,并没有舔差异。你可以使用。
答案 5 :(得分:1)
window.setInterval
与setInterval
但是,最好总是传递一个函数,而不是字符串到setInterval和setTimeout
答案 6 :(得分:0)
使用window.setTimeout
而不仅仅是setTimeout
的另一个好理由是,它允许您只向jshint
提供一个声明,代码所依赖的全局对象:
/*global window */
因此允许访问所有window
方法,而无需在jshint
指令中单独指定每个方法。