异常:TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions
时间: 2023-11-08 15:51:50 浏览: 1089
这个错误通常是在使用严格模式下访问不允许访问的属性时出现的。在严格模式下,访问"caller"、"callee"和"arguments"属性会导致TypeError异常。
在严格模式下,函数被限制在自己的作用域内,不允许访问其它函数的调用栈信息。因此,尝试访问"caller"和"callee"属性会引发异常。
解决这个问题的方法是避免在严格模式下对这些属性进行访问。可以使用其他方式来实现相同的功能,例如使用命名函数表达式或函数参数来获取函数的引用,而不是使用"caller"和"callee"属性。
如果你需要访问函数的参数,可以使用命名参数或使用arguments对象来获取参数值。但请注意,在严格模式下,arguments对象也不允许访问"callee"属性。
总之,确保你的代码在严格模式下不会访问"caller"、"callee"和"arguments"属性,以避免出现该异常。
相关问题
异常:TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mo
异常:TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them。
这个异常出现的原因是在严格模式下访问了'caller','callee'和'arguments'这些属性。在webpack打包时,默认启用了严格模式,导致这两者冲突。
解决这个问题有两种方法。一种是给函数表达式一个名字或者使用函数声明来替代访问'arguments.callee'。比如将原来的代码:
```javascript
stop = requestAnimationFrame(function () {
cxt.clearRect(0, 0, canvas.width, canvas.height)
sakuraList.update()
sakuraList.draw(cxt)
stop = requestAnimationFrame(arguments.callee)
})
```
改为:
```javascript
stop = requestAnimationFrame(asd())
function asd() {
cxt.clearRect(0, 0, canvas.width, canvas.height)
sakuraList.update()
sakuraList.draw(cxt)
stop = requestAnimationFrame(asd)
}
```
另一种方法是禁用webpack打包时的严格模式,可以使用babel-plugin-transform-remove-strict-mode插件来移除严格模式。首先使用npm install babel-plugin-transform-remove-strict-mode命令下载该插件,然后在项目的.babelrc文件中引入该插件:
```javascript
"plugins": ["transform-remove-strict-mode"]
```
通过这两种方法,可以解决这个异常问题。希望对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functio](https://blog.csdn.net/weixin_42614080/article/details/105373523)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [异常:TypeError: ‘caller‘, ‘callee‘, and ‘arguments‘ properties may not be accessed on strict ...](https://blog.csdn.net/Vixcity/article/details/128564262)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functio
TypeError: 'caller', 'callee', 和 'arguments' 属性在严格模式下 JavaScript 函数中不可访问,这是因为这些属性通常用于内部函数调试和堆栈跟踪,但在严格模式下,为了防止安全漏洞和滥用,JavaScript 规定这些私有属性不应在正常代码中直接获取。
当你试图在严格模式(`'use strict';`)的函数上下文中获取这些属性时,浏览器会抛出这个错误。例如:
```javascript
(function() {
'use strict';
console.log(callStack()); // TypeError: callStack is not a function
})();
```
在这个例子中,`callStack()` 是一个不存在的函数,但由于是在严格模式下,尝试访问 `caller`, `callee`, 或 `arguments` 会触发错误。
阅读全文