JavaScript出现“不能执行已释放的Script代码”错误的原因及解决办法

很多web开发者或许都遇到过这样的问题,程序莫名奇怪出现“不能执行已释放Script的代码”,错误行1,列1.对于这种消息描述不着边,行列描述更是让人迷茫的js错误,相信是所有调试js程序的朋友们最郁闷也最憎恨的事情!遇到这种问题,最简单的办法直接把错误贴到baidu或google那个小输入框中让他们先给点指点,再去解决,可这次却没有这么容易,在baidu搜索似乎很多人都遇到过这种问题,但是都是些什么qq空间错误,狂晕,或者就是只有问没有答的,闷!

   这种错误从何调起?后面没办法,又是猜测又是try...catch蹦错误,找了半天终于找到错误的位置,可是发现写的并没有什么问题,后来绞尽脑汁思考程序的解释过程,确依旧没有什么头绪。继续baidu,突然在某网页中看到一句话:当一个页面关闭时会自动释放页面的js。短短一句话给了我不小的启发。检查我的程序是否有页面的关闭或转向,发现是执行了转向,然后再回到这个页面时出现了错误。突然间觉得明白了。

场景:页面有a和b两个框架页iframe,在b页面中通过js将一个函数引用(函数指针)传入到a页面并保存在a页面的一个变量中,a页面可以通过这个引用操作b页面或执行b页面的一些程序,记住:此时在a页面中的变量保存的是b页面某函数的指针(内存地址),当b页面刷新或重定向后由于b页面重新构建,所以b页面中的函数指针就发生了变化,但a中仍然保存着b页面刷新前传过来的指针(内存地址),这时a页面中变量通过所指向的指针地址就无法访问到b页面中对应的函数了(因为函数指针地址已经发生了变化,及原来的内存指针已经释放),这样在执行时就会出现“不能执行已经释放的Script代码”的错误。

解决办法:在a页面中加上容错处理,当引用出现错误时要将保存的引用(函数指针)清空或指向一个默认的函数。另外在b页面再次载入时要重新给a页面传送函数引用,这样就不会出现这样的错误了。

或许这里的描述有些过于抽象了,看一个演示再看看代码就容易明白了,先test,然后return url,之后再test就会出现这个问题了。

解决方法:
在 按 return url 的事件程序之前加入
doOK = function(){alert('good');};document.getElementById('ifrm').src='t2.html'

这样就恢复了doOK函数指向的不存在的指针。有问题回复。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果 JavaScript 中说 `$` 不存在,通常是因为代码中没有正确引入 jQuery 库。请确保在 HTML 文件中正确引入 jQuery 库,可以使用以下代码: ```html <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> ``` 如果已经引入了 jQuery 库,但仍然出现 `$` 不存在的错误,请检查 jQuery 库文件路径是否正确,或者尝试使用 `jQuery` 替换 `$` 来避免命名冲突。 ### 回答2: 如果在使用JavaScript代码时遇到"$不存在"的情况,可以尝试以下几种解决方法: 1. 确认是否正确加载了jQuery库:在使用"$"前,需要确保已正确加载了jQuery库。可以检查HTML页面中是否正确引入了jQuery库的文件,或者确认该文件是否已成功加载。 2. 检查是否使用了其他JavaScript库:如果在同一个页面中同时使用了多个JavaScript库,并且这些库也使用了"$"作为变量名,可能会导致冲突。此时需要将jQuery库的$符号与其他库的符号进行冲突解决,可以使用jQuery.noConflict()方法来解决。 3. 使用"jQuery"代替"$"符号:如果确保已正确加载了jQuery库,但仍然无法使用"$"符号,可以尝试使用"jQuery"来替代"$"符号。jQuery库依然会被正确调用,只是用法略有不同,比如将"$"符号改为"jQuery"。 4. 确认代码在DOM加载完成后执行:在某些情况下,如果JavaScript代码在DOM加载完成前执行,可能会导致"$"符号无法找到。为了解决这个问题,可以将代码包裹在$(document).ready()中,确保代码在DOM加载完成后再执行。 总结:当JavaScript代码出现"$不存在"的情况时,首先需要确认是否正确加载了jQuery库。如果已加载了jQuery库,在多库冲突的情况下可以使用jQuery.noConflict()方法解决,或者用"jQuery"代替"$"符号。同时,需要确保代码在DOM加载完成后执行。 ### 回答3: 如果JS代码出现$不存在的情况,可以尝试以下几种解决方法: 一、检查是否引入了jQuery库:$是jQuery的一个简化形式,如果未引入jQuery库,则会报$不存在的错误。确认代码中是否有正确引入jQuery库的语句,例如: ```html <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> ``` 二、确保在代码中使用$之前,jQuery已完全加载:有时浏览器的加载速度慢或网络问题可能导致代码在jQuery加载之前执行,可在代码中使用DOMContentLoaded事件,确保在文档完全加载后再执行代码,例如: ```javascript document.addEventListener("DOMContentLoaded", function() { // 在这里使用$ }); ``` 三、查看是否与其他JavaScript库冲突:如果在同一页面中使用了其他JavaScript库,可能会导致$被占用。可以尝试使用jQuery.noConflict()方法释放$的控制权,并用其他变量替代,例如: ```javascript var jq = $.noConflict(); // 使用jq代替$ ``` 四、使用全写形式替代$:将代码中的$全部替换为jQuery,确保代码能正确执行,例如: ```javascript jQuery(document).ready(function() { // 在这里使用jQuery代替$ }); ``` 五、确保代码位于正确位置:有时候代码放置的位置不正确,可能导致$不存在的错误。确保代码位于页面加载完毕后执行,或者在DOM元素加载完毕后执行。 总之,要解决$不存在的问题,首先要检查是否引入了jQuery库,然后确认代码执行时机和位置,还可以考虑与其他库的冲突以及使用全写形式替代$等方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值