异常:TypeError: ‘caller‘, ‘callee‘, and ‘arguments‘ properties may not be accessed on strict mode func

文章讲述了在开发过程中遇到的TypeError,由于在严格模式下不能访问caller,callee,和arguments属性,导致JS代码出错。通过分析问题,作者发现是由于使用了requestAnimationFrame中的arguments.callee。按照MDN的建议,通过给匿名函数赋予名称来解决这个问题,从而成功修复了樱花飘落特效的JS错误。
摘要由CSDN通过智能技术生成

异常:TypeError: ‘caller‘, ‘callee‘, and ‘arguments‘ properties may not be accessed on strict mode func 问题解决

今天我在给博客添加樱花飘落的特效的时候

下载并引入了一个JS

之后打包执行的时候

发现樱花不会动了

检查报错发现是文章标题的报错

还是老样子,网上的大部分查到的解决bug的方式都没用

但是整理了一下,发现他们共同的问题的原因是

webpack 打包的时候,项目默认是严格模式的

报错的异常说明了用到了’caller’,‘callee’,and 'arguments’这些东西与严格模式冲突了

于是我就在这个JS文件里面找以上这些参数名

找到了报错的函数是这个方法

stop = requestAnimationFrame(function () {
    cxt.clearRect(0, 0, canvas.width, canvas.height)
    sakuraList.update()
    sakuraList.draw(cxt)
    stop = requestAnimationFrame(arguments.callee)
  })

既然找到原因了,那么我们可以顺路来看看,严格模式的时候,MDN的文档是怎么说的

arguments.callee - JavaScript | MDN

在这里插入图片描述
他给出的解决方案是给函数表达式一个名字或者使用一个函数声明

那么我们就给里面的函数一个声明

于是,我把方法改成了这样

stop = requestAnimationFrame(asd())
function asd() {
  cxt.clearRect(0, 0, canvas.width, canvas.height)
  sakuraList.update()
  sakuraList.draw(cxt)
  stop = requestAnimationFrame(asd)
}

问题解决~

❀完结撒花❀

其他的解法可以参考这篇文章

希望对你们有所帮助,如果可以的话希望顺路来看看我的博客哦
新的博客
以前的博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值