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

JavaScript循环读书笔记

循环知识:自我重复的风险 第一部分: 重复运行的代码就可以使用循环来解决。JavaScript的重复机制为循环(loop) for:适合重复动作已知次数的循环。...while:while循环能重复执行动作,直到特定条件语句为true。 for循坏由4部分组成。...1.初始化(initialization):初始化只在循环开始时发生 2.测试条件(test condition):测试条件检查循环是否要再继续 3.动作(action):循环里的动作就是每一轮循环实际重复执行的代码...4.更新(update):循环里的负责更新每一轮循环的循环变量。...continue会摆脱当前这一轮循环,但不会完全跳出循环,而是强迫跳入下一轮循环。 第三部分: 数组概念: 一维数组,二维数组和多维数组 数组(array):可用于存储多块数据于一体的变量。

96070

JavScript中的循环

循环知识 第一部分: 重复运行的代码就可以使用循环来解决。JavaScript的重复机制为循环(loop) for:适合重复动作已知次数的循环。...while:while循环能重复执行动作,直到特定条件语句为true。 for循坏由4部分组成。...1.初始化(initialization):初始化只在循环开始时发生 2.测试条件(test condition):测试条件检查循环是否要再继续 3.动作(action):循环里的动作就是每一轮循环实际重复执行的代码...4.更新(update):循环里的负责更新每一轮循环的循环变量。...continue会摆脱当前这一轮循环,但不会完全跳出循环,而是强迫跳入下一轮循环。 第三部分: 数组概念: 一维数组,二维数组和多维数组 数组(array):可用于存储多块数据于一体的变量。

1.9K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    冒泡排序学习总结

    到这里我们就看到最大的7已经移到了数组的最后,相当于已经把最大的元素已经冒泡成功了,完成了一轮冒泡。 接下来就是重复这个排序的动作,直到所有元素排序完成。...3、算法优化 3.1 减少内层循环比较次数 我们看上图可以发现,每一轮的冒泡都要比较6次,但是是不是每轮冒泡都需要比较6次呢?不是。...我们这里利用外层循环 j 这个变量,j 一开始是0,所以第一轮循环,它并不会影响我们的冒泡次数,但随着 j 不断的增长,第二轮冒泡的时候 在 a.length-1 的基础上再 -j , 这样就达到我们比较次数逐次递减的效果...int[] a, int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } } 每轮冒泡时,最后一次交换索引可以作为下一轮冒泡的比较次数...优化方式: 每轮冒泡时,最后一次交换索引可以作为下一轮冒泡的比较次数,如果这个值为零,表示整个数组有序,直接退出外层循环即可

    16810

    通过代码学Sutton强化学习第四章动态规划

    它们之间的交互过程遵从有限马尔可夫决策过程:若Agent在t时间步骤时处于状态 ,采取动作 ,然后环境根据自身机制,产生Reward 并将Agent状态变为 。 ?...满足 以Grid World为例,当Agent处于编号1的网格时,可以往四个方向走,往任意方向走都只产生一种 S, R,因为这个简单的游戏是确定性的,不存在某一动作导致stochastic状态。...s 对应的最佳v值是只采取此状态下的最佳动作后的Expected Return。...,改成只执行一遍,并直接用最佳Q值更新到状态V值,如此可以不用显示地算出 而直接在V值上迭代。...新的一轮迭代时,将下一轮需要计算的状态保存到 changed_state_set_ 中,本轮结束后,changed_state_set 更新成changed_state_set_,开始下一轮循环直至没有状态需要更新

    1.4K52

    macrotask与microtask

    个回调函数,下下一次才执行内层的那个,所以macrotask的规则是等下一班车(下一轮事件循环,或者当前事件循环尚未发生的特定阶段) microtask 微任务,也称job。...所以,事件循环带来了异步特性,以应对慢动作阻塞渲染的问题 P.S.实际上,DOM事件回调都是macrotask,同样依赖着事件循环 Call Stack JS的单线程环境意味着某一时刻只能做一件事,所以...可以用来跟踪事件循环,比如确认是否处于同一个事件循环,比如之前讨论的setTimeout 0与setImmediate的顺序问题,可以通过计数器做进一步验证,结果如下: // 1st setImmediate...1 setTimeout 1 // 2nd setTimeout 0 setImmediate 1 1 1表示timer没赶上接下来的第一轮事件循环,到第二轮的时候才执行,0 1表示在接下来的第一轮事件循环之前...2:最后一题很有意思,答案在评论里,这系列5篇应该都不错

    71520

    Vue学习笔记之Vue学习前的准备工作

    然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效 for循环相信大家都玩过。...也就是说,所有数组a的成员里面的i,指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是 10 如果使用let,声明的变量仅在块级作用域内有效,最后输出的是 6 var a = []; for...当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。...你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?...这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算 0x03 不存在变量提升 var命令会发生”变量提升“现象,即变量可以在声明之前使用,

    54630

    从0学Java(七)for循环

    for循环像一个计数循环:设定一个计数器,初始化它,然后在计数器到达某值之前,重复执行循环体,而每执行一轮循环,计数器值以一定步进行调整,比如加1或者减一。...这篇文章的内容将讲解以下知识点: for循环和while循环区别 ①for循环和while循环区别 for(初始动作;条件;每轮的动作){} for中的每一个表达式都是可以省略的 for(条件;)==while...(条件) 案例:阶乘 写一个程序,让用户输入N,然后计算的结果需要用一个变量保存,可以是int的factor,在计算中需要有一个变量不断的从1递增到n,那可以是int的i Scanner in=...){} 第一部分是一个初始化,可以定义一个新的变量:int count=10或者直接赋值:i=10....第二部分是循环维持的条件,这个条件是先进行的,与while循环一样,进入循环之前,首先要检验条件是否满足,条件满足才执行循环;条件不满足就结束循环。

    25020

    卧槽,为什么你的程序执行到一半就退出了,原来是因为加了这个

    但是有的时候,我们会希望在程序在执行了循环体的一半时退出,直接跳出本轮循环,或者忽略下面的语句开始下一轮的循环。具体来讲的话,就是通过 break 语句和 continue 语句来实现。...所以如果只希执行某一个 case 后面的语句和程序块,还需要配合一个 break 语句,让代码在适当的位置跳出 switch 。...在循环体中,如果我们想要让程序在中途跳出循环,那么我们同样可以使用 break 语句来实现,直接跳出循环体。 举个栗子,如下是一个数是否是素数的代码 ?...当 j = 3 的时候遇到 break 跳出该层循环,但是刚刚讲过,他只能跳出一层循环,所以还会继续执行 i 的那层循环,然后还是j 的值会一直增大直至到 3……这样一直下去,最后打印输出的当然是 i...2 continue 语句 还有一种情况是在满足某一种情况的时候,跳过本轮循环下面的语句,开始下一轮循环,可以使用 continue 语句。

    1.7K20

    深入理解React生命周期

    ()中的后期加载 出生阶段的最后一个方法 该方法只在组件实例及所有其子元素被加载到原生UI后被调用一次 在该方法中可访问原生UI,或通过refs访问子元素了,所以有可能会触发一次新的渲染过程;可以通过...,此时该属性仍是同一个数组对象,React在不做深度比较的情况下无法轻易判断其是否更改,为了避免错误,仍会调用componentWillReceiveProps() 当只更改了state时,该方法会被略过...),也可以跳过shouldComponentUpdate() 上述原理是,forceUpdate()后,组件被打上一个标记,添加到脏队列后,shouldComponentUpdate()就被忽略掉了 不合理使用该方法极易引起死循环...(),在omponentDidUpdate()中也可以访问原生UI、取得refs或在必要的时候发起另一轮更新和渲染 参数为prevProps, prevState 与之前的方法不同的是,现在this.props...中的数据发生变化时更新图表 如果需要根据最新的尺寸、样式等setState()发起新一轮渲染,则务必小心行事,比如判断获取的高度值是否是变化过的,否则会陷入渲染死循环 [V] Unmount消亡阶段 从原生

    1.3K10

    ES6语法学习(let与var区别、块级作用域、const命令)

    console.log(b)//1 console.log(a)//报错 a is not defined for循环的计数器就很适合let: //以下i只在for循环体内有效,在循环体外就会报错 for...,所以全局只有一个变量i,每一次循环i的值都会发生改变,被赋给数组a的函数内部的console.log(i)中的i指向全局的i,因此所有数组a的成员中的i指向的都是同一个i,导致运行时输出的是最后一轮的...只在本轮循环中有效,所以每一次循环都是一个新的变量,于是最后输出6。...i都是重新声明的,那么它怎么知道上一轮循环的值从而进行计算出本轮循环的值呢?...原因:其实因为JavaScript引擎内部都会记住上一轮循环的值,初始化本轮的变量i时就在上一轮的基础上进行计算。

    1.1K00

    ECMAScript简介以及es6新增语法

    它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。...也就是说,所有数组a的成员里面的i,指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是 10 而如果如果使用let,声明的变量仅在块级作用域内有效,最后输出的是 6,如下: var a =...当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。...你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?...这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算 2.不存在变量提升 var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined

    43000

    Java 数组、排序和查找(2)

    数组扩容 案例: 实现动态的给数组添加元素效果,实现对数组扩容。...要求: 1)原始数组使用静态分配, int [ ] = arr{1, 2, 3} 2)增加一个元素,使其添加到数组最后,例如增加元素4后 int [ ] = arr{1, 2, 3, 4} 3)用户可以通过如下方法来决定是否继续添加...——添加成功,是否继续添加?...运行目标: 数组[24,69,80,57,13] 第一轮循环:目标是把最大的数放到数组最后位置 第1次比较 [24,69,80,57,13] 第2次比较 [24,69,80,57,13] 第3...2)每一轮的循环都可以确定一个数的位置,比如第一轮循环确定了最大的一个数,第二轮循环确定了第二大的数…… 3)当进行比较时,只要前面的数大于后面的数就进行交换 4)每轮的比较次数在减少,4 => 3

    36610

    Hands on Reinforcement Learning 01

    机器和环境的一轮交互是指,机器在环境的一个状态下做一个动作决策,把这个动作作用到环境当中,这个环境发生相应的改变并且将相应的奖励反馈和下一轮状态传回机器。...在每一轮交互中,智能体感知到环境目前所处的状态,经过自身的计算给出本轮的动作,将其作用到环境中;环境得到智能体的动作后,产生相应的即时奖励信号并发生相应的状态转移。...整个交互过程的每一轮获得的奖励信号可以进行累加,形成智能体的整体回报(return),好比一盘游戏最后的分数值。...具体而言,强化学习中有一个关于数据分布的概念,叫作占用度量(occupancy measure),其具体的数学定义和性质会在第3章讨论,在这里我们只做简要的陈述:归一化的占用度量用于衡量在一个智能体决策与一个动态环境的交互过程中...根据1.5节的分析,策略的价值可以等价转换成奖励函数在策略的占用度量上的期望,即: 最优策略=arg⁡min⁡策略E状态,动作∼策略的占用度量[奖励函数(状态, 动作)]\text{最优策略} = \underset

    39720

    2023秋招前端面试必会的面试题_2023-02-28

    事件是用户操作网页时发生的交互动作,比如 click/move, 事件除了用户触发的动作外,还可以是文档加载,窗口滚动和大小调整。...这种模型通过attachEvent 来添加监听函数,可以添加多个监听函数,会按顺序依次执行。 DOM2 级事件模型,在该事件模型中,一次事件共有三个过程,第一个过程是事件捕获阶段。...这种事件模型,事件绑定的函数是addEventListener,其中第三个参数可以指定事件是否在捕获阶段执行。...第一轮事件循环正式结束,这一轮的结果是输出1,7,6,8。 (2)第二轮时间循环从**setTimeout1**宏任务开始: 首先输出2。...第二轮事件循环结束,第二轮输出2,4,3,5。 (3)第三轮事件循环开始,此时只剩setTimeout2了,执行。 直接输出9。

    84520

    AQS原理浅析关于Lock及AQS的一些补充:羊群效应

    若整个过程中被中断过, 则最后我在 自我中断一下 (selfInterrupt), 因为外面的函数可能需要知道整个过程是否被中断过 } if(shouldParkAfterFailedAcquire...,若不是都会返回false,不过会再做一些操作:判定节点的状态是否大于0,若大于0则认为被“CANCELLED”掉了(我们没有说明几个状态的值,不过大于0的只可能被CANCELLED的状态),因此会从前一个节点开始逐步循环找到一个没有被...“CANCELLED”节点,然后与这个节点的next、prev的引用相互指向;如果前一个节点的状态不是大于0的,则通过CAS尝试将状态修改为“Node.SIGNAL”,自然的如果下一轮循环的时候会返回值应该会返回...例如有些时候发现尝试加锁无法加上,先释放已经成功对其它对象添加的锁,过一小会再来尝试,这样在某些场合下可以避免“死锁”哦。...AQS的FIFO的等待队列给解决在锁竞争方面的羊群效应问题提供了一个思路:保持一个FIFO队列,队列每个节点只关心其前一个节点的状态,线程唤醒也只唤醒队头等待线程。

    1.3K60

    Hands on Reinforcement Learning 04 Dynamic programming

    另外,策略迭代和价值迭代通常只适用于有限马尔可夫决策过程,即状态空间和动作空间是离散且有限的。...智能体的起点是左下角的状态,目标是右下角的状态,智能体在每一个状态都可以采取 4 种动作:上、下、左、右。如果智能体采取动作后触碰到边界墙壁则状态不发生改变,否则就会相应到达下一个状态。...+ j][a] = [(1, next_state, reward, done)] return P 4.3 策略迭代算法 策略迭代是策略评估和策略提升不断循环交替,直至最后得到最优策略的过程...对于打印出来的动作,我们用^o动作,ooo>表示在当前状态只采取向右动作。...如果只在策略评估中进行一轮价值更新,然后直接根据更新后的价值进行策略提升,这样是否可以呢?答案是肯定的,这其实就是本节将要讲解的价值迭代算法,它可以被认为是一种策略评估只进行了一轮更新的策略迭代算法。

    37630

    用C语言写贪吃蛇笔记-1

    此游戏不仅能锻炼人的思维敏捷性,而且还可以提高玩家的逻辑判断能力。 ---- 程序整体设计说明 任何一种游戏都必须具备开始部分,运行部分,结束部分。...,这时由于没有庆平的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来就像多一节身体,所以将蛇的最后一节用背景色覆盖。...运行部分: 第一轮循环:第一步,出现食物; 第二步,蛇不停运动; 第三步,检查蛇是咬到自己或撞到墙壁; 由第四步起游戏有两条支线(A、B): A :第四步,当蛇没有碰到自己或墙壁,蛇继续前进,绘制蛇的动作...; 第五步,判断蛇是否吃到食物,如果蛇吃到食物,身子变长,原来的食物消失;如果蛇没有在规定的时间内吃到食物,食物将自动消失。...第六步,让玩家输入控制指令,让蛇在下一轮循环的第二步改变运动方向;第七步,第二轮循环的第一步,重复第一轮的步骤; B:第四步,蛇碰到自己或墙壁,终止游戏。

    2.3K30

    Python基础语法-控制流程语句-continue

    一、概述在Python编程中,控制流程语句是非常重要的,可以通过控制流程语句来改变程序的执行顺序。其中,continue语句是一种控制流程语句,用于跳过当前循环中的某些代码,并继续执行下一轮循环。...执行语句其中,关键字continue用于跳过当前循环中的某些代码,并执行下一轮循环;if语句用于判断是否需要跳过当前循环;else语句用于在不满足if条件时执行一些操作。...(i)上述代码中,使用range()函数遍历数字序列1~10,if语句用于判断当前数字是否为偶数,如果是偶数,则使用continue语句跳过当前循环,继续执行下一轮循环;如果是奇数,则使用print()...执行上述代码,输出结果如下:13579上述结果表明,使用continue语句跳过了所有偶数的输出,只输出了奇数。...在循环中使用continue语句时,需要确保continue语句出现在循环的条件语句中。continue语句用于跳过当前循环中的某些代码,并继续执行下一轮循环。

    42740
    领券