使用Javascript和块作用域在循环之前分配VARABLE是否运行得更快?

使用Javascript和块作用域在循环之前分配VARABLE是否运行得更快?,javascript,Javascript,这是真的吗 可以放置在循环外部的语句或赋值将 使循环运行得更快 坏的: var i; for (i = 0; i < arr.length; i++) { var i; var l = arr.length; for (i = 0; i < l; i++) { vari; 对于(i=0;i

这是真的吗

可以放置在循环外部的语句或赋值将 使循环运行得更快

坏的:

var i;
for (i = 0; i < arr.length; i++) {
var i;
var l = arr.length;
for (i = 0; i < l; i++) {
vari;
对于(i=0;i
更好的代码

var i;
for (i = 0; i < arr.length; i++) {
var i;
var l = arr.length;
for (i = 0; i < l; i++) {
vari;
var l=阵列长度;
对于(i=0;i

更新

var i;
for (i = 0; i < arr.length; i++) {
var i;
var l = arr.length;
for (i = 0; i < l; i++) {

在循环之前声明i的目的是什么?

它可以使代码更快一点。在第一个代码片段中,每次迭代时,引擎都必须进行计算

arr.length
查找数组的大小可能比查找普通变量所指的整数需要更多的处理时间

在第二个代码段中,您只需查找一次数组的大小,而不是每次迭代都要查找


这就是说,考虑到当今计算机的速度,这一考虑在99.9%的情况下几乎毫无意义。最好先编写干净可读的代码,然后在出现问题时优化性能。

据我所知,
arr.length
检查已经被所有主要浏览器优化了。即使IE之后也是如此8.所以,我不认为这真的会降低执行速度大约十年了。在循环之前声明I的目的是什么?@Pingpong它可能是为了使
var
更明确,但是
var
现在应该被认为是不推荐的和过时的。最好用现代语法编写(使用
const
let
),然后向下传输到ES5或ES6,以便production@Pingpong正如我所说的-自动将源代码传输到ES5或ES6进行生产,以使用
const
let
,保持源代码的干净和可读性,同时继续允许过时的浏览器理解您的代码。不要为了过时而使源代码哑巴浏览器,而不是为它们传输您的生产代码。@Pingpong有趣的事实是,IE11“工作”于
let
const
。然而,它们只是
var
的别名,不会阻塞作用域。
const
也可以重新分配。不过,传输您的代码是最好的做法,因为它避免了许多问题。“在循环之前声明i的目的是什么?"超旧的编码风格。现在它基本上不相关了。在过去它主要是不相关的。以前使用它的唯一原因是提醒程序员没有块作用域,所以所有变量都在函数的开头声明。看看那个页面,这是W3Schools不是一个好的参考的另一个例子。我知道我今天情况有所好转,但现在只是低于平均水平,甚至更糟。页面上唯一有用的建议是“减少DOM访问”。这也是不言而喻的-多次查找元素将…多次查找元素。即使如此,按ID查找也应该是最快的,因此给出的示例可能更相关。您可以推荐任何更好的javascript学习资源吗?希望它不会被so删除。Mozilla开发者网络维基(MDN)非常高的质量和良好的维护。它包括相关文档和很好的有用示例。请参阅和举个例子。这样的事情在2021年不值得担心。JavaScript运行时优化和现代设备计算带宽使得它完全不相关,除非你在一个系列中处理数百万件事情是的,即使这是真的,最好的办法就是找出如何停止处理一系列数以百万计的事情。