这是否在javascript中创建循环引用
Does this create a circular reference in javascript?
在确定 SQL 选择是否异步返回空集?我最终尝试使用对象的方法作为事件处理程序。 在事件处理程序的上下文中使用对象的正常"this"与方法的对象不对应(为什么,不确定,除了我目前对javascript的简单理解之外,我的猜测是由于变量名称的范围?
正如我在之前的Q中提到的,从 http://w3future.com/html/stories/callbacks.xml 开始,他们的解决方案基本上是让每个对象提供一个"var me = this"变量。 我的问题是,这是否创建了一个循环引用来防止对象被垃圾回收?
如果是这样,有没有更好的方法来完成任务?
谢谢。
是的,这将创建一个循环引用。
但是,它不会引起任何问题。
现代Javascript垃圾收集器可以很好地处理循环引用。 (在IE6中,DOM和用户对象之间交叉的引用除外)
如果s
和引用它的所有内容要么离开可访问的范围,要么被手动删除,那么它将被垃圾回收。 如果您删除了s
但statement.executeAsync
仍然引用了回调,则对me
的引用也将保留。
delete s;
s; //undefined
//This will still contain the function reference
statement.executeAsync.handleResult;
delete statement; //Now s and me should be garbage collected
如果您只是单独清除每个处理程序而不是语句对象,那也可以工作。假设您可以单独访问每个回调。
delete statement.executeAsync.handleResult;
delete statement.executeAsync.handleError;
delete statement.executeAsync.handleCompletion;
这也取决于执行异步的实现方式。 如果内部实现没有将回调存储在最终回调之后的作用域中,那么它将被清理并删除s
相关文章:
- 创建一个循环来简化HTML和CSS代码
- 正在为循环创建唯一id
- 使用来自不同循环Javascript的数据创建数组
- 在for循环中仅创建手风琴的内容
- 在Django中,可以在视图中创建一个包含js的变量,然后在循环模板标记中使用它
- 循环选择标记并创建数组或字符串
- jQuery使用animate创建循环
- 反应.js通过数组创建循环
- 这是否在javascript中创建循环引用
- 为什么要创建循环来获取事件的元素
- 创建循环设置超时 jquery 数组
- jQuery basic:如何使用此结构创建循环
- Javascript:创建循环以连接选中复选框的结果
- 如何基于分隔符从字符串创建循环
- 如何使用two.js创建循环热点
- 正在为setTimeout创建循环
- 在Jquery中使用小数创建循环
- 如何用javascript在carousel中创建循环
- 在 javasctipt 警报或提示中创建循环
- 简单 HTML 表单创建循环中的永恒循环