JavaScript 变量作用域 [重复]

2024-03-22

我的一些 JavaScript 代码有问题。

Script

setTimeout(function() {
    for (var i = 0; i < 5; i++) {
        setTimeout(function() {
            console.log(i);
        }, i * 200);
    }
}, 200);

Outputs

5, 5, 5, 5, 5 而不是 1, 2, 3, 4, 5

我可以理解为什么这不起作用,但我想知道是否有人可以向我解释发生了什么以及为什么它不起作用!

另外,如何克服这个范围问题?


The setTimeout回调函数都是异步执行的,所有的console.log您拨打的电话指的是同一件事i变量,并且在执行它们时,for循环结束了 and i包含 4.

你可以包裹你的内心setTimeout在接受参数的函数内部调用,以存储对所有参数的引用i正在迭代的值,如下所示:

setTimeout(function() {
    for (var i = 0; i < 5; i++) {
      (function (j) { // added a closure to store a reference to 'i' values
        setTimeout(function() {
            console.log(j);
        }, j * 200);
      })(i); // automatically call the function and pass the value
    }
}, 200);

查看我对以下问题的回答以了解更多详细信息:

  • 匿名函数中的变量——有人能解释一下以下内容吗? https://stackoverflow.com/questions/1552941
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 变量作用域 [重复] 的相关文章

  • 如何在chartjs中绘制多个时间序列,其中每个时间序列都有不同的时间

    例如 我有两个时间序列 s1 2017 01 06 18 39 30 100 2017 01 07 18 39 28 101 and s2 2017 01 07 18 00 00 90 2017 01 08 18 00 00 105 我想在
  • 我是否需要关心异步 Javascript 的竞争条件?

    假设我加载了一些我知道在将来某个时候会调用的 Flash 影片window flashReady并将设置window flashReadyTriggered true 现在我有一个代码块 我想在闪存准备好时执行它 我希望它立即执行 如果wi
  • 平面列表滚动时响应触摸事件的延迟

    我在反应本机应用程序中使用 FlatList 实现了无限滚动 这个列表是一个轮播列表 可以认为是一个很长的列表 当我滚动列表时 列表外部的触摸事件在单击时没有响应 但在 FlatList 滚动完成时响应 我该如何改进这个 这个问题很难回答
  • 从平面数组创建嵌套对象

    我目前有一个对象数组 我正在尝试将其重塑为嵌套对象ID作为对象键 并将其作为目标ID与parentid 如果不是 0 我尝试了几种方法 但我很挣扎 主要绊脚石for me是超过一两层深度的任何东西 理想情况下 我需要它是动态的 这样它就可以
  • 访问 .js 文件中的 Nuxt 插件

    假设我有一个脚本文件 foo js function doStuff how to access store and other plugins here export default doStuff 如果不将调用组件作为参数传递 我如何访
  • 将 Javascript 正则表达式转换为 PHP

    我知道这个问题已经被问了大约十几次 但是从技术上讲 这个问题并不是一个骗局 如果您愿意 请检查其他问题 基本上 我有一个 Javascript 正则表达式来检查用于前端验证的电子邮件地址 并且我使用 CodeIgniter 在后端进行双重检
  • CSS - 制作“步进”文本的好方法?

    有没有一种好的方法可以实现以下目标 而无需任何额外的标记 不过使用 JavaScript 就很好了 任何想法 Thanks Edit 我的标记将是这样的 div style width 400px p Text text text Text
  • 将字符串数组转换为对象 Id 数组

    我有一个字符串数组 let stringObjectIdArray fssdlfsd343 43434234242 342424242 我想使用 mongoose 类型将字符串数组更改为对象 Id 数组 但它不起作用 它仅适用于字符串而不是
  • HTML:您可以隐藏/忽略浏览器查找中的文本元素 (CTRL+F)

    我有一个具有相当复杂的 UI 的 Web 应用程序 并且屏幕的一部分保留用于内容 如果可能的话 我想这样做 以便当用户使用浏览器的内置文本搜索 CTRL F 时 UI 中的任何文本都将被忽略 并且仅搜索实际内容 这可行吗 CSS 和 Jav
  • 显示来自 mongodb 的所有数据并在 doT.js 模板引擎中渲染它

    我想从 mongodb 中提取数据并将其传递给视图 一切似乎都正常 但我没有看到所有 10000 条记录都显示出来 而是只看到了一条 我觉得我非常接近解决它 但我陷入困境 我正在使用node mongodb native express和d
  • HTML5 游戏到本机应用程序 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在用 HTML5 制作游戏 我最熟悉 HTML5 并且比 C 等更高级的语言更喜欢它 HTML5
  • 如何在 Angular 模板中嵌入 GitHub gist?

    角度忽略script其模板中包含标签 但加载 GitHub gist 需要它们 执行此操作的最佳做 法是什么 使用iframe 创造script动态标记 或者是其他东西 一种方法是创建一个iframe with script里面并在你希望你
  • 如何在Android上获取角度中的按键事件?

    我们如何在 Android 上的 Angular 中获取按键事件及其值 我使用phonegap Cordova Angular JS
  • 从 json 文件加入时添加角色 (autorole)

    我对 JS 相当陌生 为了学习 我决定为 Discord 制作一个机器人 我学到了很多并且正在继续学习 我有一个 autorole 的想法 我知道传统的做法 bot on guildMemberAdd member gt var role
  • 如何处理 React JSX 中的长类名?

    假设我在 React JSX 中渲染这个组件 render return h1 Some text h1 这些类触发我的 JS linter 的行太长 而且很难阅读 怎样才能分开长className将 React 组件中的属性分成多行而不破
  • 单击 div 中的图像时如何翻转该 Div?

    好吧 我对编写 Javascript 知之甚少 我可以对其进行一些编辑 并且涉足了 CSS3 动画 我将向您展示我正在努力实现的目标 然后在下面进行解释 网站布局将是这样的 https i stack imgur com RMb4R jpg
  • 在 Jest 测试中设置时刻时区

    我有 util 函数 它以特定的日期格式解析给定的日期 即 2019 01 28 然后使用momentJS检索当天的开始并将其转换为 ISO 日期格式 dates js import moment from moment export co
  • 为什么发送 fetch() 时我的响应数据未定义?

    我正在尝试在客户端使用 fetch 将数据发布到我的 NodeJS 服务器或从我的 NodeJS 服务器发布数据 服务器很好地收到了 post 请求 我能够记录 req 变量 但是当我 res send any data 时 客户端无法检测
  • 更改哈希值而不触发 hashchange 事件

    我使用哈希来动态加载内容 为了使后退按钮正常工作 我正在捕获哈希更改 然而 有时我需要更改哈希值而不触发哈希更改函数 例如 当页面重定向到服务器端时 我需要在内容返回后更新哈希值 我想出的最佳解决方案是取消绑定 hashchange 事件
  • 仅使用 javascript 获取网站的正文元素

    我想检索以下网站的正文内容http sports espn go com nhl bottomline scores nhl s left1 http sports espn go com nhl bottomline scores nhl

随机推荐

  • n 维向量

    假设我想声明一个向量的向量的向量的向量 最多 n 维 Like so using namespace std for n 2 vector
  • 为什么 Verilog 不被视为编程语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 教授在课堂上说学生不应该说他们学会了用Verilog 编程 他说 Verilog 之类的东西不是用来编程的 而是用来设计的 那么 Verilog
  • 摆脱“使用临时;使用文件排序”

    当我对我的查询进行解释时 我看到第一行的 额外 下有 使用临时 使用文件排序 我知道这很糟糕 但我不知道它到底意味着什么或如何解决它 如果您想查看我的查询 这是我针对同一查询提出的更普遍的问题 MySQL 查询优化和菜鸟解释 https s
  • 从 Ext.data.Store 访问 http 状态代码

    我有一个 http API 令人震惊的新技术 它对设置不同响应状态的不同错误做出反应 问题是 当使用 Ext data Store 和一些 XMLHttpRequest inside 代理时 处理这种状态的最佳方法是什么 据我所知 加载 事
  • 我可以根据时间更改背景颜色吗?

    我使用 html5 CSS bootstrap 创建了一个漂亮的网站 我想知道是否可以在白天 蓝色 和夜间 暗红色 期间在代码中自动更改背景颜色和导航栏选择颜色 我可以做些什么来根据用户的时间更改导航栏和背景的颜色吗 这是我的代码
  • C++:在小型项目的头文件中编写整个类的缺点?

    只是一个风格问题 我是一名独立工作的独立游戏开发者 我养成了在标题中编写整个类的 坏 习惯 我知道 h cpp 文件组合的一些好处是它们允许将代码分割成编译块 只要它们保持不变就不需要重新编译 并允许将接口与实现分开 然而 这些事情对我来说
  • Django-MPTT子页面的完整路径如何制作?

    我开始使用 Django MPTT 应用程序在我的 Django 站点页面上获取基于树的方法 对于前 我有带有子页面的页面 Trance 声音恍惚 子页 Hard Trance 子页面 Breaks Atmo Breaks 子页面 渐进式休
  • 创建独立于 bash 的进程

    我编写了一个程序来计算笔记本电脑中可用的电池电量 我还在程序中定义了一个阈值 每当电池电量低于阈值时 我想调用另一个进程 我使用了 system invoke o 其中 invoke o 是我必须运行的程序 我正在运行一个脚本 该脚本每 5
  • 在 zend 框架中运行控制器单元测试时出现“没有为此应用程序定义默认模块”异常

    我有一个具有默认目录结构的应用程序 对于没有自定义模块的应用程序 请参阅最后的结构图 我按照许多教程中的说明编写了一个 ControllerTestCase php 文件 并且还创建了相应的引导文件 再次参见最后的图 我已经编写了一些运行良
  • 处理双重间接时避免不兼容的指针警告

    假设这个程序 include
  • R 的 C API 中的 SEXP 数据类型到底是什么以及为什么使用它? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我知道关于 SEXP 的维基百科页面 并且我知道它代表符号表达 我 模糊地 知道 SEXP 是指 Lisp 中的树数据结构的符号 但我
  • 方向改变时 Activity 不断重新启动

    当屏幕旋转或用户在手机上滑动键盘时 如何防止活动重新启动 这可能吗 有解决办法吗 感谢所有相关答案 您可以通过在您的activity你的元素manifest xml 有问题的元素称为android configChanges 并且您需要注册
  • 上传错误:无法连接到 DataPusher。 ckan 2.4.3 中的错误

    我正在尝试将我的数据集上传到数据存储区 我创建数据集并尝试使用 ckan 界面中的 上传到数据存储 菜单将数据集上传到数据存储 我收到 上传错误 无法连接到 DataPusher Web 中的错误消息不在任何日志中 ckan 日志 data
  • 如何使用 RemoteViews 更新通知?

    我正在创建一个通知RemoteViews https d android com reference android widget RemoteViews从一个习惯Service 它在前台模式下以通知方式运行 也就是说 只要通知对用户可见
  • 根据另一列的相应行值创建行子集?

    让 CSV 包含两列 年龄 和 性别 其中 Age 30 24 55 61 70 21 Gender Male Female Male Male Male Female 我希望它向我显示与 Gender Male 相对应的所有 Age 值
  • R 从一个向量的最大值中提取 data.frame 的子集并按另一个向量分组[重复]

    这个问题在这里已经有答案了 gt ID lt c A A A B B B C C C C C gt WK lt c 1 2 3 1 2 3 1 2 3 4 5 gt NumSuccess lt c 0 0 2 0 0 1 0 0 0 0 3
  • 导出数组以在另一个 javascript 文件中使用

    在我的帖子请求中 我想检查是否thisString存在于另一个 javascript 文件数组中 Array js exports names John Mary Main js if names includes thisString d
  • jQuery UI 对话框关闭并没有清除对话框

    Using jQuery用户界面 http en wikipedia org wiki JQuery UI 我有一个选项卡插件 在选项卡 1 中加载了一个包含表格的页面 每行都有一个对话框的链接 一切正常 保存以下内容 对话框中有一个选项可
  • 在 Win32 程序中用 main() 函数替换 WinMain()

    我在 StackOverflow 和 Google 上进行了一些搜索 但没有找到答案 我想用这种类型的用户编程来启动我的应用程序 int main Window App Test 640 480 while App IsOpen Do th
  • JavaScript 变量作用域 [重复]

    这个问题在这里已经有答案了 我的一些 JavaScript 代码有问题 Script setTimeout function for var i 0 i lt 5 i setTimeout function console log i i