如何避免从闭包中访问可变变量

2024-01-06

我有一些这样的代码:

for(var id=0; id < message.receiver.length; id++){
   var tmp_id = id;
   zlib.gzip(JSON.stringify(message.json), function(err, buffer){
                        ...
   pushStatusPool[message.receiver[tmp_id]] = null; // fix memory leak
   delete pushStatusPool[message.receiver[tmp_id]];
   ...
   });
}

我收到警告,使用tmp_id闭包中可能会导致问题,因为它是一个可变变量。

我怎样才能避免这种情况呢?我的意思是我怎么能发送一个不可变的变量到回调,因为这是一个 for 循环,我无法更改代码zlib.gzip?或者换句话说,我如何将参数传递给闭包?


您需要创建一个范围才能正确捕获tmp_id使用自执行函数。这是因为整个 for 循环是一个作用域,这意味着每次循环都会捕获相同的变量。所以回调最终会得到错误的 id,因为temp_id的值将在调用回调之前更改。

不过,我会忽略(或关闭)该警告,这似乎是在抱怨,因为temp_id是可变的,您可以重新分配它。这有点傻。如果您确实想修复它,请尝试使用const关键字而不是var.

for(var id=0; id < message.receiver.length; id++){
   (function(){
       const tmp_id = id;
       zlib.gzip(JSON.stringify(message.json), function(err, buffer){
                        ...
           pushStatusPool[message.receiver[tmp_id]] = null; // fix memory leak
           delete pushStatusPool[message.receiver[tmp_id]];
           ...
       });
   })();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免从闭包中访问可变变量 的相关文章

  • 如何动态删除嵌套的json键?

    这是示例 json search facets author language value nep count 3 value urd count 1 source value West Bengal State Council of Vo
  • 从 puppeteer PDF 中删除分页符?

    我目前正在尝试查看是否有一种方法可以删除我的 puppeteer PDF 中的分页符 因为我当前的 PDF 设置中的一些分页符正在以一种奇怪的方式切断文本 我正在谈论的内容的屏幕截图 我的傀儡代码 app get companyId pdf
  • 早于 0.4.12 的 Node.js 无法在 AWS EC2 上正常工作。为什么?

    我无法在 AWS EC2 Ubuntu 或 CentOs 没关系 上安装 node js v0 6 1 安装后我输入node 处理器负载达到100 但 v0 4 12 工作正常 可能只有我有这个问题 那不好意思了 请告诉我我做错了什么 提前
  • 带有node-gyp的node.js应用程序无法在azure网站上部署

    我已经建立了一个 Azure 网站 并且正在尝试使用依赖于 node gyp 的示例应用程序 我得到这个 emote gt email protected cdn cgi l email protection install C DWASF
  • 为什么Promise中的代码会同步执行? [复制]

    这个问题在这里已经有答案了 在我的项目中 我有一个很长时间运行的操作 所以我决定将其放入Promise因为我认为这样我就可以在里面的代码继续执行其他操作Promise正在跑步 调试的时候发现外面的代码Promise仅当里面的代码执行Prom
  • NodeJS - 将相对路径转换为绝对路径

    In my 文件系统我的工作目录在这里 C temp a b c d 在 b bb 下有文件 tmp txt C temp a b bb tmp txt 如果我想从工作目录转到该文件 我将使用以下路径 bb tmp txt 如果该文件不存在
  • 是否有跨浏览器的方式在Javascript中设置style.float?

    通常 如果您需要在 JavaScript 中设置样式属性 您可以这样说 element style attribute value 虽然略有不同 但属性名称通常与 HTML 属性名称类似 尽管是驼峰式 对我来说问题是 float 属性不起作
  • Mongoose 总是返回空数组? [复制]

    这个问题在这里已经有答案了 我是nodejs i的新手 我已经有一个名为aqi的数据库 集合名称为pln 我试图在网页上显示集合中的所有记录 但猫鼬总是返回空数组 我已经用其他数据库测试了它 但我可以从它们获取数据 但对于 pln mong
  • 如何跨多个 React Redux 组件使用 requestAnimationFrame 实现游戏循环?

    努力思考最好的解决办法 我可以使用递归调用requestAnimationFrame有一个游戏循环 export interface Props name string points number onIncrement gt void o
  • 在 Express.js 中使用相同的响应对象发送多个响应(res.json)

    res json Object assign cart generateArray res json JSON stringify cart totalPrice 我如何发送发送多个响应 因为我的代码不起作用 谢谢 您不能发送多个回复 您发
  • JavaScript setTimeout 和更改系统时间会导致问题

    我注意到如果我设置setTimeout未来1分钟 然后将我的系统时间更改为过去5分钟 setTimeout功能将在 6 分钟后触发 我这样做是因为我想看看夏令时系统时钟更改期间会发生什么 我的 JavaScript 网页使用setTimeo
  • 如何捕获文本区域上的 Enter 按键而不是 Shift+Enter? [复制]

    这个问题在这里已经有答案了 I m doing it for texarea A function should be called when the user press Enter but nothing should be done
  • jQuery:向左滑动和向右滑动

    我见过slideUp and slideDown在 jQuery 中 左右滑动的功能 方式怎么样 您可以使用 jQuery UI 中的附加效果来做到这一点 详情请参阅此处 http docs jquery com UI Effects Sl
  • eventSources 到事件 Json,完整日历

    我正在尝试从 eventSources 获取 json 调用到我的事件 我在 eventSources 中返回的 json 是 title Title Test start 1305841052 当我将此字符串传递到事件中时 它会正确显示日
  • 测试 jQueryUI 是否已加载

    我正在尝试调试网站 并且我认为 jQueryUI 可能未正确加载 如何测试 jQueryUI 是否已加载 if jQuery ui UI loaded OR if typeof jQuery ui undefined UI loaded 应
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 使用严格模式编译指示时如何声明全局变量

    使用自调用函数来包装严格模式兼容代码 通常称为严格模式编译指示 被认为是一种很好的做法 function use strict Strict code here 我的问题是在这种情况下如何声明全局变量 我今天知道的三种替代方案 替代方案 1
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att
  • 拉斐尔路径交叉点不起作用

    我对拉斐尔和 pathIntersection method JSFiddle 示例 http jsfiddle net t6gWt 2 您可以看到有两条线都与曲线相交 但当我使用 pathIntersection method 有一个未解
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已

随机推荐

  • 在C++中从JNI调用Java Jar代码

    我正在尝试模仿这个 http snuggletex sourceforge net maven xref uk ac ed ph snuggletex samples MinimalExample html http snuggletex
  • 为什么 cmath pow 给出的答案不准确?

    在 C 11 中 pow 1061 6 1426567426713180416 检查最后 3 位数字 我确信结果是错误的 因为 1061 6 1426567426713180361 但另一种方法做得对 long a 1 for int i
  • 如何在web.config转换过程中添加文件?

    我正在使用 Visual Studio 2012 开发一个网站 web config 当前在其转换中包含以下文件 web 调试 config web Release config 我最近在我的项目中添加了一个新的构建配置 名为 Stagin
  • 从字典中随机输入

    从 C 字典中获取随机条目的最佳方法是什么 我需要从字典中获取一些随机对象以显示在页面上 但是我无法使用以下内容 因为字典无法通过索引访问 Random rand new Random Dictionary lt string object
  • Magento Grid - 将平面表连接到 EAV 后排序和过滤工作不正确

    我有 2 个定制系列 具有平面数据的常见集合 我需要将他们加入到客户选择中 它与innerJoin 配合使用效果很好 但对连接字段进行过滤和排序不起作用 我该如何解决这个问题 prepareCollection 示例 collection
  • 如何在给定分支中查找文件

    我注意到 在进行代码查看时 我公司的人们通常只给出完成工作的分支 而没有其他任何信息 所以我想一定有一种简单的方法来找出给定分支中具有版本的所有文件 这与查找所有文件是一样的 这已经改变了 是的 我不知道在某个分支中查找文件的预期 简单方法
  • 简单&小,纯javascript灯箱(对话框覆盖)? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个用纯 JavaScript 构建的小型 功能有限的灯箱 这是针对可嵌入小部件的 因此不使用
  • 如何在 C/C++ 中将字符串从 UTF8 转换为 Latin1?

    我的问题很简单 但到目前为止我找不到解决方案 如何转换UTF8编码string到 latin1 编码string在 C 中不使用任何额外的库 如 libiconv 到目前为止我能找到的每个例子都是用于 latin1 到 UTF8 的转换 t
  • 在新的弹出窗口中打开标题位置?

    我想看看是否可以打开这样的标题位置 if GET id 99993 header Location page php 并让它在 jQuery 弹出窗口中打开 prettyPhoto 是一个在线 jQuery 弹出窗口 我正常的 a href
  • 如何从 Java 中的输入文本中删除标点符号?

    我正在尝试使用 Java 中用户的输入获取一个句子 我需要将其变为小写并删除所有标点符号 这是我的代码 String words instring split s for int i 0 i lt words length i words
  • Powershell - 检索内部异常以输出(socketException)

    我最近开始深入研究 Powershell 中的错误处理 我注意到一些我不太理解的东西 我不知道这种行为来自哪里 我有一个简单的函数 它使用以下命令检查域名 System Net DNS GetHostByName 如果这个变量传递给一个不存
  • 删除集合列表的重复项

    我有一个集合列表 L set 1 4 set 1 4 set 1 2 set 1 2 set 2 4 set 2 4 set 5 6 set 5 6 set 3 6 set 3 6 set 3 5 set 3 5 实际上在我的例子中是倒数元
  • 添加新消息时滚动到底部

    我正在制作一个聊天机器人 当用户给出新输入或通过 API 发送数据时 我想滚动到聊天框的底部 它不滚动 滚动只是停留在同一位置 但数据正在添加到聊天框中 我已经尝试过其他聊天机器人的代码 但它也不起作用 var outputArea cha
  • Javascript - 无限滚动 JSON 数组?

    我有这样的 JavaScript items forEach function item index arr console log item price var message BitSkins Price item bprice if
  • 通过相机扫描图像和从相机捕获图像有什么不同吗?

    我需要知道扫描和用相机拍照之间的区别 举个例子 我们通常用安卓手机扫描二维码 条形码之类的东西 它们也是图像 我们可以用相机拍照 它也图像 那么 扫描二维码是指拍摄图像并对其进行处理 还是有什么特殊的东西从像素值获取图像 最大的区别是当你c
  • 如何在 Openscenegraph 中从 2D 鼠标单击屏幕坐标点计算 3D 点(世界坐标)?

    我试图在 2D 屏幕空间上用户选择的点的 3D 空间上放置一个球体 为此 我尝试使用以下技术从 2d 点计算 3d 点 但该技术没有给出正确的解决方案 mousePosition x clickPos clientX window left
  • Jython easy_install 错误

    我的目的是向 jython 添加一些 python 库 即 suds 包 为此 请尝试遵循以下指示http www jython org jythonbook en 1 0 appendixA html setuptools http ww
  • $wpdb 在 WordPress 插件文件中不起作用

    我正在使用 WordPress 插件 我创建一个自定义表单 用户在其中添加值 然后单击提交按钮 当用户单击提交按钮时 它会重定向到自定义流程文件 我在其中编写用于插入和更新数据的查询 I my 进程 php文件 首先我打电话全局 wpdb
  • 当浏览器关闭时运行服务器端功能

    背景 我正在使用 C 代码隐藏创建一个非常简单的类似聊天室的 ASP NET 页面 当前用户 聊天消息显示在位于 AJAX 更新面板内的控件中 并使用计时器 它们每隔几秒从数据库中提取信息 我试图找到一种简单的方法来处理将用户退出浏览器时的
  • 如何避免从闭包中访问可变变量

    我有一些这样的代码 for var id 0 id lt message receiver length id var tmp id id zlib gzip JSON stringify message json function err