Javascript 哪种方法更好,setInterval()还是window.setInterval()?
好的,这个问题有两件事 首先,我要问setTimeout()和setInterval()的问题 我见过几种不同的方式给他们打电话,我想知道哪种方式最适合这种情况 我正在制作一个js/canvas游戏,我只是查看我的绘制间隔(在这里循环绘制方法) 不管怎样,这里是我所看到的不同的方式 A部分:Javascript 哪种方法更好,setInterval()还是window.setInterval()?,javascript,Javascript,好的,这个问题有两件事 首先,我要问setTimeout()和setInterval()的问题 我见过几种不同的方式给他们打电话,我想知道哪种方式最适合这种情况 我正在制作一个js/canvas游戏,我只是查看我的绘制间隔(在这里循环绘制方法) 不管怎样,这里是我所看到的不同的方式 A部分: 使用窗口 drawInterval = window.setInterval(draw, 60); drawInterval = setInterval(draw, 60); 不使用窗口 drawIn
drawInterval = window.setInterval(draw, 60);
drawInterval = setInterval(draw, 60);
drawInterval = window.setInterval(draw, 60);
drawInterval = setInterval(draw, 60);
drawInterval = setInterval(draw, 60);
drawInterval = setInterval("draw()", 60);
drawInterval = setInterval(draw, 60);
drawInterval = setInterval("draw()", 60);
对于B部分:我是否应该使用引号和括号?之前有人告诉我,在这种情况下使用引号和括号是个坏主意。在
窗口上不确定。setInterval
与刚才的setInterval
但是,最好始终将函数传递给setInterval和setTimeout,而不要将字符串传递给setInterval和setTimeout。setInterval()和setInterval()
完全相同-窗口部分是隐式的,可以省略
setTimeout和setInterval都将计算字符串,但最佳做法是发送对函数的引用,因此不使用引号。至于使用窗口作为前缀。
,没有任何区别。你可以用任何一种
除非您声明了自己的本地作用域setInterval
函数,否则setInterval
和window.setInterval
之间没有区别
第二种形式使用隐含的eval()
。在可能的情况下应避免这种情况,因为它可能会导致代码注入
A部分中的调用是相同的(除非您在某个地方重新声明其中一个函数)。归根结底,这取决于偏好——我更喜欢关闭窗口,因为它是不必要的
对于B部分,方案1肯定是更好的做法。选项2将使用eval
该字符串,并且几乎应始终避免使用eval
窗口是最常用的。是否显式使用它是风格的问题,但作为Python开发人员,我认为显式更好
如果使用引号,setInterval()实质上是“evals”语句。不要使用引号
使用window.setTimeout
而不仅仅是setTimeout
的另一个很好的理由是,它允许您只为代码所依赖的全局对象jshint
提供一个声明:
/*global window */
因此,允许访问所有的窗口
方法,而不必在jshint
指令中单独指定它们。好的,那么clearInterval()呢,我必须使用window.clearInterval()吗?我想不…@Jake-你的假设是正确的。相同的“除非您声明了本地范围的版本”语句适用于窗口的所有成员。setInterval、setTimeout、clearInterval、clearTimeout等等。嗯,window.setInterval()
不是更快吗?因为JS引擎在到达窗口作用域之前必须先查看所有其他作用域/记住一段关于这个问题的谷歌老视频。/@Jake-没错,是的。如果在函数中声明自己的名为localStorage的变量,将检索其值。如果您没有重新声明它,解释器将查找“范围链”,直到它到达顶级范围(窗口)并找到它需要的内容。这里有一篇文章对此进行了进一步的讨论:我是否可以添加第二个原因来避免调用eval()
,因为它会导致巨大的性能影响(在渲染循环代码中特别重要)。@Jake,是的,正如其他人window所提到的。setInterval
和setInterval
实际上是一样的,window.setInterval
更为明确。