哪种方式更好,setInterval()或window.setInterval()?

时间:2011-08-04 16:07:44

标签: javascript

好的,这个问题还有几个问题。

首先,我要问的是setTimeout()和setInterval()

我已经看到了几种不同的方式来称呼它们,我想知道哪种方式最适合这种情况..

我正在制作一个js / canvas游戏,我只是查看我的绘制间隔(它会循环绘制方法)

无论如何,这是我见过的不同方式......

A部分:

  1. 使用窗口。

    drawInterval = window.setInterval(draw, 60);
    
  2. 不使用窗口。

    drawInterval = setInterval(draw, 60);
    
  3. B部分:

    1. 不使用函数名称旁边的引号和括号

      drawInterval = setInterval(draw, 60);
      
    2. 在函数名称周围使用引号和括号

      drawInterval = setInterval("draw()", 60);
      
    3. 因此对于 A部分:我应该使用窗口。或不? 那么window.clearInterval()和clearInterval本身呢?

      B部分:我应该使用引号和括号吗?之前我被告知在这种情况下使用引号和括号是个坏主意。

7 个答案:

答案 0 :(得分:24)

  1. 除非您声明了自己的本地范围setInterval功能,否则setIntervalwindow.setInterval之间没有区别。

  2. 第二种形式使用隐含的eval()。应尽可能避免这种情况,因为它提供了代码注入的潜力。

答案 1 :(得分:5)

  1. windowglobal object。你是否明确地使用它是一种风格问题,但作为一个Python开发人员,我认为明确更好。

  2. 如果使用引号,则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.setIntervalsetInterval

不确定

但是,最好总是传递一个函数,而不是字符串到setInterval和setTimeout

答案 6 :(得分:0)

使用window.setTimeout而不仅仅是setTimeout的另一个好理由是,它允许您只向jshint提供一个声明,代码所依赖的全局对象:

/*global window */

因此允许访问所有window方法,而无需在jshint指令中单独指定每个方法。