设置超时时 JavaScript 闭环问题

2024-01-11

我在教程中找到了一些示例(说这是规范的示例)

        for (var i=1; i<=5 ; i++) {
        setTimeout(function() {
            console.log("i: " + i);
        }, i*1000);
    }

现在,我明白了,闭包将当前范围传递给函数,我假设它应该输出 1,2,3,4,5。但相反,它打印了数字 6 五次。
我在 chrome 调试器中运行它,首先它在执行 i 值递增的同时通过循环而不进入函数,只有在此之后,它才进入内部函数并执行 5 次。
我不确定为什么要这样做,我知道,由于闭包,当前作用域被传递给函数,但为什么它不在每次循环迭代时执行?


当超时运行时,for循环已完成,并且i是 6,这就是为什么你会得到你所看到的输出。你需要捕捉i在循环期间:

for (var i=1; i<=5 ; i++) {
    (function(innerI) {
        setTimeout(function() {
            console.log("i: " + innerI);
        }, innerI*1000);
    })(i);
}

这将创建一个带有自己参数的内部函数(innerI),它会立即被调用,因此捕获的值i以便在超时时间内使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置超时时 JavaScript 闭环问题 的相关文章

  • 为任何更新查询增加 Mongoose 文档版本的简单方法?

    我想开始利用 Mongooses 文档版本控制 v key 我在实际增加版本值时遇到了问题 然后我发现您必须添加this increment 执行查询时 有没有办法自动递增 目前 我只是将其添加到pre用于更新类型查询的中间件 module
  • javascript/jquery 从选择中删除或删除选项

    在某些情况下 我需要从选择中删除选项 基本上 if mystatement true remove item with id option1 from select of id select1 有人知道我可以实现这一目标的代码吗 非常感谢
  • 声明为对象文字与函数的剔除视图模型之间的区别

    在knockout js中 我看到视图模型声明为 var viewModel firstname ko observable Bob ko applyBindings viewModel or var viewModel function
  • 检测单选按钮/复选框状态的变化

    我需要可靠地检测页面上单选按钮 复选框的状态变化 以便查看表单是否被修改 现在 这是一个完全独立的脚本 我无法修改任何控制表单的内容 目前 我只能看到两种方法 onchange事件处理程序 有助于处理文本框 文本区域和选择 但不会针对复选框
  • 我可以通过什么方式混合 jQuery 和 vanilla JavaScript

    我有一个用普通 JavaScript 编写的 Web 应用程序 我想用 jQuery 动画来增强它 并使用我在各种 jQuery 插件中找到的一些功能 例如上传 http www uploadify com 可以通过什么方式将 jQuery
  • 如何使用多个 select2 框过滤表格?

    我正在尝试使用 和多个 select2 框的类来过滤表格 表格 HTML table class table tbody tr class kanban event Austin td td tr tr class csm event Ch
  • 在 Node.js 中生成带条形码的 pdf

    我在用https github com devongovett pdfkit https github com devongovett pdfkit生成 PDF 文件 我可以简单地使用类似的方法 app get get pdf req re
  • 为什么省略分号会破坏这段代码?

    或者换句话说 为什么分号插入失败 导致下面的代码被破坏 function Foo Foo prototype bar function console log bar lt missing semicolon function Foo pr
  • JAVASCRIPT - 为什么这个对象没有改变?

    function myFunc theObject theObject make Ford model Focus year 2006 var mycar make Honda model Accord year 1998 var x my
  • 如何将 Ajax.BeginForm MVC 助手与 JSON 结果一起使用?

    我正在尝试使用 ASP NET MVC Ajax BeginForm 帮助程序 但不想在调用完成时使用现有的内容插入选项 相反 我想使用自定义 JavaScript 函数作为回调 这可行 但我想要的结果应该以 JSON 形式返回 不幸的是
  • Angular UI 路由器嵌套视图问题

    我在理解 Angular UI Router 嵌套视图的工作原理时遇到了一些问题 我的 stateProvider 看起来像这样 stateProvider state login url login views main template
  • 通过 JavaScript 单击按钮/页面提交

    我想了解 asp net 框架如何知道何时单击了按钮 因此一旦收到请求 就会在服务器上触发其单击事件 我需要了解它是如何工作的 因为我想从 JavaScript 触发按钮的服务器单击事件 我能够从 JavaScript 执行页面提交 doc
  • AngularJS + jQuery 移动

    是否还有其他可能性来设计AngularJS以移动友好的方式应用程序CSS 我正在计划一个移动应用程序 并希望使用 AngularJS 进行逻辑和数据绑定 但我不想自己设计所有内容CSS The AngularJSFAQ说它使用jQuery
  • Angular 4 Http POST 不起作用

    我希望每个人都做得很好 我最近开始使用 Angular 4 4 我一直在尝试将数据发布到我的 api 服务器 但不幸的是它不起作用 我花了大约两天的时间 但仍然没有成功 甚至已经尝试过 6 7 篇文章角 io https angular i
  • 播放没有音频标签的音频

    是否可以在没有音频标签的情况下仅使用 javascript 播放音频 我通过 tinyMce 编辑器注入脚本 因为我无权访问网站的后端 并且它不支持客户端的音频标签 她只想要当您将鼠标悬停在图像上时发出简单的声音 我已经完成了所有设置 但是
  • ES6 模块范围

    我有代码 lib js var a a export var b b main js console log a a variable is not available in a global scope import b from lib
  • 为什么 call 比 apply 快那么多?

    我想知道是否有人知道why call比apply 在 Chrome 中 速度大约快 4 倍 在 Firefox 中快 30 倍 我什至可以制作自定义原型 apply2 在大多数情况下 运行速度是apply 这个想法取自角度 Function
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • Graphql 将多个查询合并(组合)为一个?

    我正在尝试使用 JavaScript 将多个 GraphQL 查询合并为一个查询 我正在寻找这样的东西 let query3 mergeQueries query1 query2 我们事先不知道哪些查询将被组合 假设我有这样的查询 输入查询
  • 将 html 文本框的值分配给 div 的标题

    line 1

随机推荐

  • QueryDSL / JPQL:如何构建连接查询?

    我尝试通读 QueryDSL 文档 但仍然很困惑 我习惯于编写大量 SQL 但这是我第一次真正尝试使用 QueryDSL 和 JPQL JPA2 我有以下实体 Entity public class Provider implements
  • Android - VideoView 需要按 BACK 两次才能退出

    我有一个显示不同视频文件的活动 当我单击视频文件时 我会进入另一个 Activity 其中 VideoView 会播放视频 我的问题是 当我想退出此活动并返回到上一个活动时 我应该单击两次后退按钮才能返回 如果我只单击一次 视频会再次开始播
  • 如何在 CodeIgniter 模型中使用 ON DUPLICATE KEY UPDATE?

    我有一个 CodeIgniter PHP 模型 我想将一些数据插入数据库 然而 我在 原始 SQL 查询中设置了这个 ON DUPLICATE KEY UPDATE duplicate duplicate 1 我正在使用 CodeIgnit
  • daemonset 不创建任何 pod

    我正在尝试使用 Kubernetes DaemonSets 但一点运气都没有 我已经寻找解决方案但无济于事 我希望这里有人可以提供帮助 首先 我见过这张票 https stackoverflow com questions 34818198
  • 从数组中获取大小为 n 的所有组合的算法(Java)? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 现在我正在尝试编写一个函数 它接受一个数组和一个整数 n 并给出每个大小 n 组合的列表 因此是 int 数组的列表 我
  • 获取报警信息

    我正在实现一个应用程序 其中必须显示警报信息 日期 时间 如果可用 有谁知道如何获取报警信息吗 非常感谢 结果 最后 我可以通过上面Curious的回答来检索警报信息 此外 当我在 packages apps 中探索 Deskclock 应
  • ipad 应用程序异常退出并显示信号 11:分段错误:11

    我的应用程序异常退出 信号为 11 我不知道这意味着什么 没有崩溃日志 调试器也没有显示错误 该应用程序刚刚消失 我得到以下日志 Apr 27 21 31 31 unknown Apollo 1408
  • 如何在编译时保存指向成员的指针?

    考虑下面的代码 template
  • 反应选择禁用选项

    我在禁用 React Select 元素内的大型列表中的某些选项时遇到问题 我有大约 6 500 个选项被加载到选择中 起初我遇到了搜索功能滞后的问题 但后来我开始使用react select fast filter options来解决这
  • 在 PHP 中写入文本文件时换行符不起作用

    我有以下测试脚本 但是 当运行并使用记事本打开时 数据以单行形式返回 没有中断 如下所示 Floppy Jalopy 疯狂盒子 Pointy Pinto 疯狂盒子 我找不到 疯狂盒子 的合适字符 但它确实是一个疯狂的盒子 是什么赋予了 最好
  • 仅在使用 cx_freeze 时出现 UnicodeDecodeError

    我收到错误 UnicodeDecodeError ascii codec can t decode byte 0xa0 in position 7338 ordinal not in range 128 一旦我尝试在使用 cx freeze
  • 在项目中声明全局变量并在xslt中使用它

    对于 XSLT 方面的疑问 我会寻求您的指导 在我当前的项目中 需要创建许多 XSLT 文件 在这些转换中 执行的共同步骤很少 例如更改输入 xml 中元素值的大写 我当前在 XSLT 中使用以下代码 因此如果创建了 50 个 XSLT 则
  • F# 正向管道从 int 转换为 bigint

    我对 F 相当陌生 遇到了这种情况 希望有人能解释为什么我的编译器不喜欢这些代码 如果在 F 中我执行以下操作 let FloatToInt 10 0 gt int let IntToFloat 10 gt float 一切都很好 数字被转
  • Python 中基于字符串的枚举

    封装我正在使用的状态列表enum模块 from enum import Enum class MyEnum Enum state1 state1 state2 state2 state MyEnum state1 MyEnum state1
  • __attribute__((__interrupt__, no_auto_psv)) 是做什么的?

    void attribute interrupt no auto psv T1Interrupt void 5 Hz attribute 指令或宏来自 GCC 但是 interrupt and no auto psv不是 它特定于硬件 那么
  • 检测何时触发position:sticky 的事件

    我正在使用新的position sticky info http updates html5rocks com 2012 08 Stick your landings position sticky lands in WebKit 创建类似
  • 如何创建 Java 自定义 Web 控件?

    这个问题最初出现在我的脑海中 我可以在 Servlet 中使用 AWT 控件吗 这将显示我对这个问题的无知 我是 JAVA 技术的新手 但经过一些阅读后 我似乎了解 AWT 控件直接连接操作系统 GUI 元素 因此无法在 Servlet 中
  • 对齐 CSS 网格中的列

    我应该设置哪些 CSS 属性 以便各列相互缠绕 忽略水平相邻列的高度 失败的尝试 我正在尝试这样做display grid 但它的行为不符合我的要求 一个例子 header height 2 0rem background PeachPuf
  • 通过 PowerShell/cmd 调用 Linux 应用程序的 Windows 子系统 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 随着最近推出的 Windows 内部版本 14316 我们拥有了适用于 Linux 的 Windows 子系统 测试版 它允许在 Wind
  • 设置超时时 JavaScript 闭环问题

    我在教程中找到了一些示例 说这是规范的示例 for var i 1 i lt 5 i setTimeout function console log i i i 1000 现在 我明白了 闭包将当前范围传递给函数 我假设它应该输出 1 2