避免function的循环引用

本文探讨了JavaScript中的一种常见问题——循环引用,并提供了几种解决方法。包括将DOM元素设为null、改变事件绑定方式以及将函数定义移出加载事件。

循环引用

 

window.onload = function(){

   var el = get();

 

   el.onclick = function(){

   }

 

   //循环引用: ao->el->function->ao

 

   //1. el = null;

   //2. 不持有dom, el.onclick 改成 get().onclick

   //3. 将function定义在onload外

}

 

 

草稿,待整理。。。

在 QML 中,避免循环引用的一种常见方法是使用 weak 指针。weak 指针不会增加引用计数,也不会阻止对象的析构。因此,当一个对象需要引用另一个对象,但不需要拥有该对象时,可以使用 weak 指针。 下面是一个使用 weak 指针避免循环引用的例子: ``` import QtQuick 2.0 Item { property Item otherItem: null function doSomething() { if (otherItem !== null) { var otherItemRef = otherItem // 强制转换为弱引用 otherItemRef.doSomethingElse() } } } ``` 在这个例子中,我们使用了一个名为 `otherItem` 的 `Item` 对象作为属性。当 `doSomething` 函数被调用时,我们使用 `otherItem` 属性来调用另一个对象的函数。注意到我们将 `otherItem` 强制转换为一个弱引用,这意味着即使 `otherItem` 被释放了,我们也不会持有它的引用。 此外,Qt Quick Controls 2.0 提供了一个对象释放机制,可以在对象不再需要时自动释放它。下面是一个使用对象释放机制避免循环引用的例子: ``` import QtQuick 2.0 import QtQuick.Controls 2.0 Item { property Item otherItem: null function doSomething() { if (otherItem !== null) { otherItem.doSomethingElse() } } Object { target: otherItem; onTargetDestroyed: otherItem = null } } ``` 在这个例子中,我们使用了一个名为 `otherItem` 的 `Item` 对象作为属性。当 `doSomething` 函数被调用时,我们使用 `otherItem` 属性来调用另一个对象的函数。同时,我们使用 `Object` 组件来监听 `otherItem` 对象的销毁事件,在 `otherItem` 被销毁时将它的引用设置为 `null`。 总之,避免循环引用是在 QML 中编写高质量代码的重要因素之一。使用 weak 指针或者对象释放机制可以帮助我们避免循环引用导致的内存泄漏问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值