for的区别.In和for循环,以及counter声明

difference between for..in and for loops, and counter declaration

本文关键字:for 以及 counter 声明 区别 In 循环      更新时间:2023-09-26

for 循环的实现之间的差异(速度,性能,副作用,…):

之间
var i;
for(i = 0; i < length; i++){ //Do something}
// more code

for(var i = 0; i < length; i++){ //Do something}
// more code

for(i = 0; i < length; i++){ //Do something}
// more code

var e;
for( e in array){ //Do something}
// more code

for(var e in array){ //Do something}
// more code

for(e in array){ //Do something}
// more code

没有区别。

JavaScript变量只有函数作用域,虽然你可以在for循环的初始化部分中放置var语句,但实际上声明被"提升"到作用域的顶部,这样当你的第二个例子运行时,它们就像第一个例子一样被处理。

EDIT:由于您在我回答后更新了问题,因此您添加的第三种语法不使用var关键字意味着变量i(或e)将被创建为全局变量-除非它已经作为全局变量存在,在这种情况下现有变量将被覆盖。全局变量访问比局部变量访问慢。

注意:我对这个问题的解释是,它不是比较标准的for循环和for..in变量,它只是比较标准for循环的不同变量声明方法,然后再对for..in循环做同样的事情。

与计数器变量的声明没有区别。

但是总是用 var

声明变量

否则会污染javascript已经很脏的全局作用域…

至于for...in与传统for 看这里…

(这是我对重复问题的回答…)

是的,javascript中的for循环和for/in循环是有区别的。以下是不同之处

考虑这个数组

var myArr = ["a", "b", "c"];

之后,我将一个元素添加到这个数组中,但是以不同的方式,如下所示:

myArr[myArr.length + 1] = "d";

此时,如果输入console.log

,这就是数组的样子
["c", "b", "a", undefined × 1, "d"]

现在,让我们使用for和for/in循环遍历数组,看看有什么区别:首先,让我们试试for循环

for(var i = 0; i != myArr.length; i++) {     // note, i used " != " instead of " < ". Yes this is faster.
  console.log(myArr[i]);
}
// output will look like this:
// "a" 
// "b" 
// "c"
// undefined × 1
// "d" 
// - This still shows the undefined value in the array.

现在,让我们看看for/in循环

for(key in myArr) {
  console.log(myArr[key]);
}
// array will look like:
// "a"
// "b"
// "c"
// "d"
// This will skip the undefined value.

区别1:当使用for/in循环时,javascript解释器将跳过所有null或未定义的值。此外,如果遇到原始值,for/in循环将把所有值转换为其等效的包装器对象。而for循环则不这样做。

差异2:当使用for循环时,我们在循环中声明了变量i,如果for循环是在函数中编写的,则该变量将在函数中作用域。这意味着,直到函数结束,变量i仍然是可用的,即使在for循环之外,但在该函数内。在for/in循环的情况下,"key"变量的作用域在for/in循环停止执行后立即消失,这意味着内存占用更少。