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

在使用setInterval的Javascript代码中,为什么每次n都不是一个不同的值?

在使用setInterval的Javascript代码中,每次n都不是一个不同的值的原因是因为setInterval函数会在指定的时间间隔内重复执行指定的代码块。在每次执行代码块时,n的值是根据代码块内部的逻辑决定的,而不是由setInterval函数控制的。

通常情况下,如果在setInterval函数中使用了一个变量n,并且在代码块内部对n进行了操作或修改,那么每次执行代码块时,n的值会根据代码块内部的逻辑进行更新。但是如果代码块内部没有对n进行操作或修改,那么n的值就会保持不变。

例如,以下是一个使用setInterval函数的示例代码:

代码语言:txt
复制
let n = 0;

setInterval(() => {
  console.log(n);
  n++;
}, 1000);

在上述代码中,每隔1秒钟,控制台会输出n的值,并且n的值会逐渐增加。这是因为在代码块内部对n进行了自增操作。

如果在代码块内部没有对n进行操作,那么n的值就会保持不变。例如:

代码语言:txt
复制
let n = 0;

setInterval(() => {
  console.log(n);
}, 1000);

在上述代码中,每隔1秒钟,控制台会输出n的值,但是n的值始终保持为0,因为代码块内部没有对n进行操作或修改。

需要注意的是,由于Javascript是单线程的,如果代码块的执行时间超过了指定的时间间隔,那么下一次执行代码块可能会被延迟。这可能会导致代码块的执行不够精确,进而影响到n的值的变化。为了避免这种情况,可以考虑使用setTimeout函数来替代setInterval函数,通过在代码块的末尾重新设置定时器来实现精确的时间间隔。

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

相关·内容

2022-10-05:一个 n x n 整数矩阵 grid , 每一个方格 grid 表示位置 (i, j) 平台高度。 当开始下雨时,

2022-10-05:一个 n x n 整数矩阵 grid ,每一个方格 gridi 表示位置 (i, j) 平台高度。当开始下雨时,时间为 t 时,水池中水位为 t 。...你可以从一个平台游向四周相邻任意一个平台,但是前提是此时水位必须同时淹没这两个平台。假定你可以瞬间移动无限距离,也就是默认方格内部游动是不耗时。当然,在你游泳时候你必须待在坐标方格里面。...你从坐标方格左上平台 (0,0) 出发。返回 你到达坐标方格右下平台 (n-1, n-1) 所需最少时间 。...时间复杂度:O(N*2logN)。空间复杂度:O(N**2)。代码用rust编写。...代码如下:use std::iter::repeat;fn main() { let mut grid = vec![ vec!

99610

掌握 C# 变量:代码声明、初始化和使用不同类型综合指南

C# ,有不同类型变量(用不同关键字定义),例如: int - 存储整数(没有小数点整数),如 123 或 -123 double - 存储浮点数,有小数点,如 19.99 或 -19.99...这将声明变量为“常量”,这意味着它是不可更改且只读: const int myNum = 15; myNum = 20; // 错误 当您希望一个变量始终存储相同,以防他人(或自己)破坏您代码时...(x + y + z); 一个示例,我们声明了三个 int 类型变量(x、y 和 z),并为它们赋了不同。...第二个示例,我们声明了三个 int 类型变量,然后将它们都赋予了相同 50。 C# 标识符 所有的 C# 变量都必须使用唯一名称来标识。 这些唯一名称被称为标识符。...注意: 建议使用描述性名称,以创建易于理解和维护代码: // 好 int minutesPerHour = 60; // 可以,但不容易理解 m 实际上是什么 int m = 60; 命名变量一般规则是

30110

【前端技能树-需要避免坑】Javascript 开发者容易花田里犯

为什么? 大多数其他语言中,上面的代码都会导致类似这样错误。因为变量 i “生命周期”(即作用域)被限制 for 循环语句中。...但在 JavaScript ,情况并非如此,即使 for 循环完成后,变量 i 仍留在作用域中,退出循环后保留其最后一个。(这种行为被称为变量提升。) 有一个解决办法。...但我们仍然不认为这是一个问题,因为每次通过先前引用 priorThing 将被解除引用。而且,它只replaceThing 主体和未使用函数中被引用,而未使用函数实际上从未使用过。...低效 DOM 操作 虽然使用 JavaScript 操作 DOM (例如,添加、修改和删除元素)变得相对容易,但却无法提高操作效率。 一个常见例子是每次添加一个 DOM 元素代码。...i++) { elements[i].onclick = makeHandler(i+1); } 在这个修改后代码版本每次通过循环时都立即执行 makeHandler,每次都接收当时

16511

开发人员面临10个最常见JavaScript问题

大多数其他语言中,上面的代码会导致一个错误,因为变量i "生命"(即使作用域)会被限制for块。...但在JavaScript,情况并非如此,即使for循环完成后,变量i仍然作用域内,退出循环后仍保留其最后。(顺便说一下,这种行为被称为变量提升(variable hoisting)。...不幸是,很容易出现不再使用 "僵尸 "对象,但GC仍然认为它们是 "可达"。 问题4:双等号困惑 JavaScript 一个便利之处在于,它会自动将布尔上下文中引用任何强制为布尔。...比如,每次添加一系列DOM元素。添加一个DOM元素是一个昂贵操作。连续添加多个DOM元素代码是低效。...(非严格模式下,它们是包含域中创建,这也可能是JavaScript问题一个常见来源)。 无效使用delete情况下抛出错误。

79910

3 个进程 P1、P2、P3 互斥地使用一个包含 NN > 0)个单元缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区某一空单元 ;P2每次用 get

3 个进程 P1、P2、P3 互斥地使用一个包含 NN > 0)个单元缓冲区。...P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区某一空单元 ;P2每次用 getodd() 从该缓冲区取出一个奇数,并用 countodd() 统计奇数个数 ;...P3 每次用geteven() 从该缓冲区取出一个偶数,并用 counteven() 统计偶数个数。...请用信号量机制实现这 3 个进程同步与互斥活动,并说明所定义信号量含义。要求用伪代码描述。...// 互斥信号量 mutex = 1; // 共享内存偶数个数 even = 0; // 奇数个数 odd = 0; // 共享内存剩余空间 empty = n; p1(){ while

63140

JavaScript 入门(下)

绿叶学习网JavaScript在线测试工具,当点击“调试代码”按钮时,就会打开一个窗口,并把HTML文档输出到新页面中去。...2、setInterval()和clearInterval() JavaScript,我们可以使用setInterval()方法来设置“重复性”调用函数。...与getElementById()方法不同是,使用该方法返回一个数组,而不是一个元素。因此,我们想要获取具体一个表单元素,就必须通过数组下标来获取。...答案是可以。那问题又来了,为什么使用document.getElementById()来获取一个元素赋值给一个变量呢?用以下代码不行么?...alert("绿叶学习网");     } 其实上述代码也是可行,只不过呢,如果不使用document.getElementById()来获取一个元素赋值给一个变量,以后我们如果要对该元素进行多次不同操作

1.1K20

从一道面试题谈谈 setTimeout 和 setInterval

最近有看到一道题目,使用 JavaScript,隔一秒打印一个数字,比如第 0 秒打印 0,第 1 秒打印 1 等等,如何去实现?...你可以将这段代码粘贴到 浏览器 Console 运行一下。结果是,每隔一秒打印一个 5 ,一共打印 5 次。这是为什么呢,为什么不是打印 0, 1, 2, 3, 4 呢?...众所周知,JavaScript 是一种单线程语言,主线程语句和方法会阻塞定时任务执行, JavaScript 执行引擎之外,存在一个任务队列。...setTimeout 打印函数执行时候就会在全局作用域中寻找变量 i,而此时全局作用域变量 i 已经变成 5 了。这也就是为什么打印数字都是 5。那么应该如何达到我们一开始预期效果呢?...根据 MDN 文档, WindowOrWorkerGlobalScope setInterval() 方法重复调用一个函数或执行一个代码段,每次调用之间具有固定时间延迟。

48420

翻译 | 一行 JavaScript 代码逆向工程

JavaScript 代码 n=setInterval("for(n+=7,i=k,P='p....setInterval 会返回一个从 1 开始整数,并且每次执行完 setInterval 之后返回都会递增。这个整数可以 clearInterval 方法里面用到(用来取消定时器)。...我们代码里, setInterval 仅仅只会执行一次,所以 n 可以简单设置为 1. 我还把 delay 重命名为 DELAY 让它看起来是一个常量。...现在当藏青色斜线大于 2 ,小于 -2 ,或者1和-1之间且不等于时候,我们将会得到一个偶数。这也是为什么 17 行之后我们会在一行内看到两组和两组以上 p。...代码里我们可以看到 n 初始是 8 (初始是 1 ,但是每次定时器被调用时就加 7),它会在每次执行定时器时增加 7。 当 n 变成 64,图形会变成如下样子。

42420

JS基础(上)

BOM对象(把浏览器地址栏,历史记录,DOM等装在一个对象) 浏览器内部有JS解释器/引擎;html里JS代码会被引擎所执行,执行结果是对DOM对象操作(即是对节点树内标签进行操作) JS添加特效...html结束前,即是前 直接在html编写 :代码 通过外部引用进来 : <script type=text...;变量名以字母、下划线、美元符号开头,后面部分可数字 函数 即 完成特定功能代码段; 常用方法 输出语句到html使用document.write(“”) Confire() :消息确认对话框;点击确认返回...Object.style.display = none/block 实现隐藏和显示 Object.className = name 实现修改类名 获取内联样式属性 获取内存渲染style使用...定时器使用 不是js内容属于浏览器 setTimeout (表达式,延时时间) : 设置延迟多少时间执行一次一个表达式 clearTimeout(名); 设置清除这个延迟器 ?

4.1K140

JavaScript事件驱动机制&定时器机制

浏览器,事件作为一个极为重要机制,给予JavaScript响应用户操作与DOM变化能力;NodeJS,异步事件驱动模型则是提高并发能力基础。...JavaScript定时器并不同于计算机底层定时中断。中断到来时,当前执行代码会被打断,转去执行定时中断处理函数。...这就是为什么浏览器运行耗时JavaScript代码时,浏览器会失去响应。 三、定时器工作原理 1. javascript引擎只有一个线程,迫使异步事件只能加入队列去等待执行。 2....setTimeout 和setInterval 是有着本质区别的:setTimeout 这段代码会在每次回调函数执行之后至少需要延时“指定延迟毫秒”再去执行(可能是更多,但是不会少)。...但是setInterval会每隔“指定延迟毫秒”就去尝试执行一次回调函数,不管上一个回调函数是不是还在执行。

1.1K61

【JS】239-浅析JavaScript异步

之前说过 JavaScript是单线程作业,但是并不代表浏览器就是单线程 JavaScript引擎负责解析和执行 JavaScript代码线程只有一个。...当浏览器开始解析代码时候,会根据代码去分配给不同辅助线程去作业。 进程 进程是指在操作系统中正在运行一个应用程序 线程 线程是指进程内独立执行某个任务一个单元。...会给编程作业带来很大负担。就我而言我想这也就说明了为什么 JavaScript没有使用异步编程原因吧。 异步与回调 回调到底属于异步么?...setTimeout延迟时间为0,这个hack经常被用到,settimeout调用函数其实就是一个callback体现 链式调用:链式调用时候,赋值器(setter)方法(或者本身没有返回方法...setTimeout、setInterval函数调用得到其返回

79920

【JS】368- 浅析JavaScript异步

之前说过 JavaScript是单线程作业,但是并不代表浏览器就是单线程 JavaScript引擎负责解析和执行 JavaScript代码线程只有一个。...当浏览器开始解析代码时候,会根据代码去分配给不同辅助线程去作业。 进程 进程是指在操作系统中正在运行一个应用程序 线程 线程是指进程内独立执行某个任务一个单元。...会给编程作业带来很大负担。就我而言我想这也就说明了为什么 JavaScript没有使用异步编程原因吧。 异步与回调 回调到底属于异步么?...setTimeout延迟时间为0,这个hack经常被用到,settimeout调用函数其实就是一个callback体现 链式调用:链式调用时候,赋值器(setter)方法(或者本身没有返回方法...setTimeout、setInterval函数调用得到其返回

74930

谈谈js函数节流

写在前面 几天没有更新博客了,最近也没什么可忙,今天我们说说js函数中常见性能优化一个方式-函数节流! 首先明白一点,但凡涉及到性能优化,基本都不是什么技术难点,为什么这么说呢?...说一下函数节流原理,其实很简单,就是我们写一段代码时候,规定他一定时间内不准连续执行, 第一次调用函数时候,创建一个定时器,执行函数以后重置定时器,同时清除之前定时器,那么每次其实我们定时器都是最新...,控制着我们代码规定时间内执行。...//这里我们设置一个时间,函数每次执行以后一秒后将控制器状态改为可执行 setTimeout(function(){ lock = true; },1000); }... 上面的代码注释写很清楚,这是我写一个很简单例子,当然有的人说这里为什么不用setInterval,这里解释一下,也可以使用,只是看实际情况来处理,那么setInterval

63930

对一行混淆 JS 代码逆向分析过程

因为 setInterval 返回一个从 1 开始整数 ID 。并在每次 setInterval 方法被调用时依次递增。(这个 ID 可以被用于 clearInterval 等方法。)...我们例子setInterval 只被调用了一次,所以 n 被设置为 1。 此外,我们把 delay 重命名为 DELAY 以作为常量。...我们研究前,我们可以做一个实验,让我们从 let magic = ((i % 2 * j - j + n / DELAY) ^ j); 移除 + n/DELAY。...这时我们式子期望也发生了反转,蓝色对角线大于 2 和小于 -2 时或是 -1 到 1 范围时式子才能为偶数。这就是为什么 17 行以后我们能看到更多组 p 展示。...让我们回到 + n/DELAY,通过代码我们可以知道 n 是从 8 开始(从 1 开始并在每次执行 setInterval 时加 7)。

1.1K20

关于JavaScript计时器知识学习

定时器由浏览器实现,不同浏览器实现也会有所不同,Node.js 也实现了自己定时器。 浏览器,主计时器函数是 Window 接口一部分,它具有一些其他函数和对象。...有些人可能认为这是一个糟糕面试问题,为什么要知道这个问题呢?!...这样,该函数可以根据我们传递给它任何延迟打印不同消息。 然后我两个 setTimeout 调用中使用了 theOneFunc ,一个 4 秒后触发,另一个 8 秒后触发。...定时器挑战#3 编写脚本以连续打印具有不同延迟消息“Hello World”。以 1 秒延迟开始,然后每次将延迟增加 1 秒。第二次将延迟 2 秒。第三次将延迟 3 秒,依此类推。...你不能使用 let 或 var。 解答 因为延迟量是此挑战变量,所以我们不能在这里使用 setInterval ,但我们可以递归调用中使用 setTimeout 手动创建间隔执行。

1.6K40

译文:开发人员面临 10个最常见JavaScript 问题

为什么大多数其他语言中,上面的代码会导致错误,因为变量i“生命”(即范围)将被限制for块。...但是,JavaScript,情况并非如此,即使for循环完成后,变量i仍保留在作用域中,退出循环后保留其最后一个。(顺便说一句,此行为可称为变量提升)。...JavaScript 问题#6:循环中不正确地使用函数定义 请考虑以下代码: 根据上述代码,如果有10个输入元素,单击其中任何一个都将显示“这是元素#10”!...以下是我们如何纠正JavaScript上述问题,以实现预期行为: 在这个修订后代码版本每次我们通过循环时都会立即执行makeHandler,每次收到i+1的当前并将其绑定到作用域num变量。...那么,这里将是setInterval和setTimeout相当典型使用,将字符串作为第一个参数: 更好选择是传入函数作为初始参数;例如: JavaScript 问题#10:未能使用“严格模式”

1.2K20

JavaScript箭头函数

前言 本文可以让你了解所有有关JavaScript箭头函数信息。我们将告诉你如何使用ES6箭头语法,以及代码使用箭头函数时需要注意一些常见错误。你会看到很多例子来说明它们是如何工作。...你可以把函数存储变量,把它们作为参数传递给其他函数,并从其他函数把它们作为返回。你可以使用JavaScript箭头函数来做所有这些事情。 无圆括号语法 在上述示例,函数是没有参数。...匿名箭头函数 在上面的演示,接下来要注意是.setInterval()方法代码。在这里,你也会发现一个匿名函数,但这次是一个箭头函数。为什么?...这个将会是Window对象! 事实上,上下文已经发生了变化,因为现在this一个非绑定或全局函数,它被作为参数传递给.setInterval() 。...它们从父级继承this,正是因为这个特点,在上面这种情况下就是很好选择。 不正常工作情况 箭头函数并不只是JavaScript编写函数一种花里胡哨新方法。

2.1K20
领券