首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

嵌套的for循环- javascript:请解释为什么在我声明内部for循环之后第一个索引会迭代

在嵌套的for循环中,内部for循环的第一个索引会迭代是因为在每次外部for循环迭代时,内部for循环都会完整地执行一次。当外部for循环的索引变化时,内部for循环会重新开始执行,包括内部for循环的索引也会重新初始化。

具体来说,当外部for循环的索引变化时,内部for循环会被执行多次,每次执行都会从内部for循环的第一个索引开始迭代。这是因为内部for循环的索引是在内部for循环的作用域中声明的局部变量,每次内部for循环执行完毕后,该变量的作用域就会结束,下一次内部for循环执行时会重新声明和初始化该变量。

因此,在嵌套的for循环中,内部for循环的第一个索引会在每次外部for循环迭代时重新初始化并迭代。这样可以确保内部for循环在每次外部for循环迭代时都从头开始执行,以完成所需的嵌套循环逻辑。

以下是一个示例代码,用于说明嵌套的for循环中内部for循环第一个索引的迭代过程:

代码语言:txt
复制
for (var i = 0; i < 3; i++) {
  console.log("外部for循环索引:" + i);
  for (var j = 0; j < 2; j++) {
    console.log("内部for循环索引:" + j);
  }
}

输出结果为:

代码语言:txt
复制
外部for循环索引:0
内部for循环索引:0
内部for循环索引:1
外部for循环索引:1
内部for循环索引:0
内部for循环索引:1
外部for循环索引:2
内部for循环索引:0
内部for循环索引:1

从输出结果可以看出,每次外部for循环迭代时,内部for循环的索引都会重新初始化为0,并按照内部for循环的条件进行迭代。这就是为什么在声明内部for循环之后,第一个索引会迭代的原因。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python流程控制

所谓流程控制是计算机运算领域用语意指在程序运行时个别的指令(或是陈述 子程序)运行或求值顺序不论是声明式编程语言还是函数式编程语言都有类似的概念 关于声明式编程语言和函数式编程语言详解 以上是官方解释...while是一个条件循环语句,与if声明相比,如果 if 后条件为真,就会执行一次相应代码块。而while中代码块一直循环执行,直到循环条件不再为真。 while:适合于循环次数是未知。...while循环是条件 性,而 for 循环迭代,所以continue开始下一次循环前要满足一些先决条件,否则循环正常结束。...程序中当遇到 continue 语句时, 程序终止当前循环,并忽略剩余语句,然后回到循环顶端。开始下一次迭代前,如果是条件循环,我们将验证条件表达式。...: for循环用于已经知道循环次数或者循环遍历可迭代数据类型例如:列表 字典等 while循环用于不知道具体循环次数情况或者无限循环 发布者:全栈程序员栈长,转载注明出处:https://

1.9K40
  • 还担心面试官问闭包?

    此篇文章总结与《JavaScript忍者秘籍》 《你不知道JavaScript上卷》 前言 为什么我们需要理解并且掌握闭包,且不说大道理,就问你要不要成为JavaScript高手?不要?...简单理解词法作用域概念,其实也就是我们常说作用域,关于JavaScript中欺骗词法以及更多关于词法作用域介绍,翻阅《你不知道JavaScript》。...总之,从上面的代码中,我们可以看到闭包有趣三个概念 内部函数参数包含在闭包中 作用域之外所有变量、即便是函数声明之后那些声明,也都包含在闭包中....如果我们试图假设循环每一个迭代在运行时都会给自己捕获一个i副本,但是根据作用域工作原理,尽管循环中五个函数是各个迭代中分别定义,但是他们都被封闭共享作用域中,因此还是只有一个i。...所以回到正题,我们需要使用闭包,每一个循环中每一个迭代都让他产生一个闭包作用域。 所以我们代码修改如下: ? but!!!你也发现了,这样并不姓,不是IIFE产生一个闭包么?

    40820

    还担心面试官问闭包?

    此篇文章总结与《JavaScript忍者秘籍》 《你不知道JavaScript上卷》 前言 为什么我们需要理解并且掌握闭包,且不说大道理,就问你要不要成为JavaScript高手?不要?...简单理解词法作用域概念,其实也就是我们常说作用域,关于JavaScript中欺骗词法以及更多关于词法作用域介绍,翻阅《你不知道JavaScript》。...总之,从上面的代码中,我们可以看到闭包有趣三个概念 内部函数参数包含在闭包中 作用域之外所有变量、即便是函数声明之后那些声明,也都包含在闭包中....如果我们试图假设循环每一个迭代在运行时都会给自己捕获一个i副本,但是根据作用域工作原理,尽管循环中五个函数是各个迭代中分别定义,但是他们都被封闭共享作用域中,因此还是只有一个i。...所以回到正题,我们需要使用闭包,每一个循环中每一个迭代都让他产生一个闭包作用域。 所以我们代码修改如下: ? but!!!你也发现了,这样并不行,不是IIFE产生一个闭包么?

    46810

    JavaScript 权威指南-学习笔记(一)

    JavaScript 权威指南-学习笔记 JavaScript是一门高级、动态、解释型变成语言,非常适合面向对象和函数式编程风格。 JavaScript变量是无类型。...hello.html:file:///F:/javascript/%E7%BB%83%E4%B9%A0DEMO/hello.html [添加图片描述] F12打开开发者工具窗口,就可以控制台看到输出信息...声明-关键词 const:声明常量(不可被修改,重新赋值抛出TypeError) let:声明变量(同一作用域中重新声明相同变量导致语法错误)推荐使用此方法声明变量 var:声明变量(使用var声明变量作用域为包含函数...[]; //创建一个空数组 a0 = "zero"; //添加一个元素 a.push("one"); //末尾添加一个值 flat()和flatMap()打平数组 flat()打平一级嵌套...数组迭代 1.数组循环 var officers = [s { id: 20, name: 'Captain' }, { id: 24, name: 'General' },

    74900

    作用域和闭包

    # try / catch 少有人注意到 JavaScript ES3 规范中规定 try /catch catch 分句创建一个块作用域,其中声明变量仅在 catch 内部有效。...引擎会在解释 JavaScript 代码之前首先对其进行编译。...var a = 2;, JavaScript 会将其看成两个声明:var a; 和 a = 2;。第一个声明是在编译阶段进行,第二个声明会被留在原地等待执行阶段。...IIFE 会为每个迭代都生成一个新作用域,使得延迟函数回调可以将新作用域封闭每个迭代内部,每个迭代中都会含有一个具有正确值变量供我们访问。...这个行为指出变量循环过程中不止被声明一次,每次迭代 都会声明。随后每个迭代都会使用上一个迭代结束时值来初始化这个变量。

    71720

    用简单方法学习ECMAScript 6

    因此写下了这篇对ES6及其新特性简要介绍,所有知识点都解释得通俗易懂,简明扼要,对于像我这样新人非常友好。 ?...但是,这里只是想解释迭代协议是什么,使它概念更清晰,并且引入关于它ES6新特性。? 通过迭代协议接收数据语言构造: // 解构实际上是在做迭代工作(重复性工作)来从数组中提取数据。...这个独一无二字符制造器使对象可迭代,并且使我们可以使用for-of循环。酷~现在我们已经我们代码里创建了一个定制迭代对象(或类),这使我们可以项目中是的迭代部分代码更简单。...对来说没有必要把所有逻辑都放进for-of循环来做一个迭代工作,只需要创建一个有意义迭代类,然后把逻辑都放在其中,然后就可以不同地方用for-of循环使用类,并且可以很简单地实现迭代工作...注意: 为什么Map和Set都是具备'size'属性而不是像数组那样用'length'属性呢?这个不同之处原因在于length是对序列而言,序列这种数据结构是有索引,像数组这样。

    1.8K41

    【翻译】ES6生成器简介

    常规JS程序中,无限循环造成严重混乱甚至错误,但是如果与生成器函数配合,无限循环非常顺畅地运行,甚至有时候我们正需要它!...但是JavaScript中,上面的代码声明了一个特殊类型函数-生成器函数。...下面我们讨论一下生成器函数内部结构。生成器函数很多方面与常规函数相似,内部结构语法是他们区别之一。 首先解释一下之前我们提到yield关键字。...不建议在生成器函数中使用return关键字来返回结果,因为使用for...of循环迭代生成器时,生成器内部使用return值将会被过滤。下面举例说明。...上面的问题(原作者)相继博客中解答,so,粉吧(顺便粉也行)。

    78770

    JavaScript 权威指南第七版(GPT 重译)(三)

    JavaScript 对象就是关联数组,本节解释为什么这很重要。 C、C++、Java 等强类型语言中,一个对象只能拥有固定数量属性,并且这些属性名称必须事先定义。...数组中插入或删除点之后元素索引根据需要增加或减少,以使它们与数组其余部分保持连续。splice()第一个参数指定插入和/或删除开始数组位置。第二个参数指定应从数组中删除元素数量。... ES6 之前,只允许 JavaScript 文件顶层或另一个函数内部定义函数声明。虽然一些实现弯曲了规则,但在循环、条件语句或其他块主体内定义函数实际上是不合法。...然而, ES6 严格模式下,允许内部声明函数。块内定义函数仅存在于该块内部,并且块外部不可见。...function之前开括号是必需,因为没有它,JavaScript 解释尝试将function关键字解析为函数声明语句。有了括号,解释器正确地将其识别为函数定义表达式。

    23810

    JavaScript 面试要点:作用域和闭包

    多层嵌套作用域中可以定义同名标识符,这叫作 “遮蔽效应”(内部标识符“遮蔽”了外部标识符)。...# try / catch 少有人注意到 JavaScript ES3 规范中规定 try /catch catch 分句创建一个块作用域,其中声明变量仅在 catch 内部有效。...var a = 2;, JavaScript 会将其看成两个声明:var a; 和 a = 2;。第一个声明是在编译阶段进行,第二个声明会被留在原地等待执行阶段。...IIFE 会为每个迭代都生成一个新作用域,使得延迟函数回调可以将新作用域封闭每个迭代内部,每个迭代中都会含有一个具有正确值变量供我们访问。...这个行为指出变量循环过程中不止被声明一次,每次迭代 都会声明。随后每个迭代都会使用上一个迭代结束时值来初始化这个变量。

    44820

    《你不知道js(上卷)》笔记1(基础知识和闭包)

    1.基础知识 1.1 编译原理 尽管通常将 JavaScript 归类为“动态”或“解释执行”语言,但事实上它是一门编译语言。...,确保使用上一个循环迭代结束时值重新进行赋值。...拜bar()所声明位置所赐,它拥有涵盖foo()内部作用域闭包,使得该作用域能够一 直存活,以供bar()之后任何时间进行引用。 bar()依然持有对该作用域引用,而这个引用就叫作闭包。...,尽管循环五个函数是各个迭代中分别定义, 但是它们都被封闭一个共享全局作用域中,因此实际上只有一个i。...迭代内使用IIFE会为每个迭代都生成一个新作用域,使得延迟函数回调可以将新作用域封闭每个迭代内部,每个迭代中都会含有一个具有正确值变量供我们访问。

    44520

    JS控制流程

    ,直接执行下一个迭代循环。...与 break 语句区别在于, continue 并不会终止循环迭代,而是: while 循环中,控制流跳转回条件判断; for 循环中,控制流跳转到更新语句。...continue 语句可以包含一个可选标号以控制程序跳转到指定循环下一次迭代,而非当前循环。此时要求 continue 语句在对应循环内部。...可选 break 语句确保程序立即从相关 case 子句中跳出 switch 并接着执行 switch 之后语句。若 break 被省略,程序继续执行 switch 语句中下一条语句。...finally子句try块和catch块之后执行但是在下一个try声明之前执行。无论是否有异常抛出或捕获它总是执行。 你可以嵌套一个或者更多try语句。

    7.3K10

    Python函数基础

    在这个解释过程中,记录好变量以及该变量所属作用域(是全局范围内变量还是函数本地变量),但一定注意,def声明函数过程中不会进行变量赋值(参数默认值除外,见下文),只有函数调用时候才会进行变量赋值...一般来说,函数嵌套时,内层函数作为外层函数返回值(当然,并非必须)。既然内层函数要作为返回值,这个嵌套内层函数更可能会是lambda匿名函数。...y+z 嵌套循环内部函数 看下面嵌套循环内部函数,每个迭代过程中都声明一个匿名函数,这个匿名函数返回循环控制变量i,同时将声明匿名函数保存到列表L中。...,会发现它们值完全相同,且都是循环迭代最后一个元素值i=4。...为什么循环迭代过程中i没有影响到匿名函数返回值?这是一个非常值得思考问题,如果不理解结果,仔细回顾前文函数变量细节。如果还是不理解,阅读Python作用域详述。

    46520

    ES6知识点补充

    next方法返回又会返回一个对象,有value和done两个属性,value即每次迭代之后返回值,而done表示是否还需要再次循环,可以看到当value为undefined时,done为true表示循环终止...... of第一个条件中声明变量即可,resdone属性控制是否继续遍历下去 for... of循环同时支持break,continue,return(函数中调用的话)并且可以和对象解构赋值一起使用...,回调函数中再嵌套回调函数导致代码非常难以维护,这是人们常说“回调地狱” ?...z+1找到相应值后再赋给变量z,但是因为暂时性死区原因(let/const"劫持"了这个块级作用域,无法声明之前使用这个变量,上文有解释),导致let声明之前就使用了变量z,所以会报错 这样理解函数默认值相对容易一些...拦截方法,当对这个代理对象某个属性进行赋值时候执行对象内部[[SET]]函数进行赋值,这个操作间接触发defineProperty这个方法,随后会执行定义callback函数 这样就实现了无论对象嵌套多少层

    1.1K50

    深入理解JavaScript作用域

    我们 for 循环头部直接定义了变量 i,通常是因为只想在 for 循环内部上下文中使用 i,但是实际上 此时 i 被绑定在外部作用域(函数或全局)中。...为 ${i}`); // ReferenceError: i is not defined 此时 for 循环头部 let 不仅将 i 绑定到了 for 循环迭代中,事实上将它重新绑定到了循环每一个迭代中...,确保使用上一次循环迭代结束值重新进行赋值。...中变量,而无需到外面的 foo(..)中查找。作用域会在查找都第一个匹配标识符时就停止。 多层嵌套作用域中可以定义同名标识符,这叫”遮蔽效应“。...JavaScript执行分为:解释和执行两个阶段 解释阶段 词法分析 语法分析 作用域规则确定 执行阶段 创建执行上下文 执行函数代码 垃圾回收 作用域函数定义时就已经确定了,而不是函数调用时确定

    70630

    大话 JavaScript(Speaking JavaScript):第十六章到第二十章

    嵌套而言,“foo()”是外部范围,“bar()”是内部范围。 遮蔽 如果作用域声明了与外部作用域中变量同名变量,则内部作用域中将阻止对外部变量访问,并且所有嵌套在其中作用域。...如果您函数相对较小(无论如何都应该是这样),那么您可以放松这个规则,将变量声明使用它们地方附近(例如,for循环内部)。这样更好地封装了代码片段。...函数声明之后。...陷阱:方法内部函数遮蔽 this 您经常在 JavaScript嵌套函数定义,因为函数可以是参数(例如回调),并且因为它们可以通过函数表达式原地创建。...通常情况下,您不需要知道这里解释细节。 数组索引并非看起来那样。 到目前为止,一直假装数组索引是数字。这也是 JavaScript 引擎在内部实现数组方式。

    39620

    《前端5分钟》之迭代器模式N+1种应用场景

    这篇文章是笔者写设计模式专题第二篇文章,也是基于工作中总结和提炼,实际应用场景中都会大量使用,至于为什么要写设计模式,主要是为了提高团队代码质量和可维护性,后续继续推出设计模式相关文章,供大家参考和学习...你将学到 迭代器模式含义 实现一个数组迭代器 实现一个对象迭代器 实现路径查找/赋值迭代器 如何用迭代思想解决分支循环嵌套问题 实现一个图片播放器 ?...正文 1.迭代含义 迭代器模式主要思想就是不暴露对象内部结构同时可以按照一定顺序访问对象内部元素。...分支循环嵌套问题主要是指在循环体中还需要进行额外判断,如果判断条件变多,将会造成严重性能开销问题,如下面的例子: // 数据分组 function group(name, num) {...100种,那么我们就要做100000*100种无用分支判断,这样无疑让你代码大数据下卡死。

    1.2K10

    深入理解JavaScript闭包之什么是闭包

    一个真实面试场景 A: 什么是闭包 B: 函数 foo 内部声明了一个变量 a, 函数外部是访问不到,闭包就是可以使得函数外部访问函数内部变量 A:额,不太准确,那你说一下闭包有什么用途吧 B...首先解释5是从哪里来,这个循环终止条件是 i 不再 < 5,条件首次成立时 i 值是5,因此,输出显示循环结束时 i 最终值。 延迟函数回调会在循环结束时才执行。...但是实际上,根据作用域原理,尽管循环五个函数都是各自迭代中分别定义,但是他们都封闭一个共享全局作用域中,因此实际上只有一个 i。即所有函数共享一个 i 引用。...这样修改之后每次迭代内使用 IIFE(立即执行函数)会为每个迭代都生成一个新作用域,使得延迟函数回调可以将新作用域封闭每个迭代内部,每个迭代内部都会含有一个具有正确值变量可以访问。...为什么总是 JavaScript 中闭包应用都有着关键词 “return”, javaScript 秘密花园 中有一段话解释到:闭包是JavaScript 一个非常重要特性,这意味着当前作用域总是能够访问外部作用域变量

    84430
    领券