JavaScript严格模式下如何禁止在非函数内部使用caller
时间:2026-08-12 | 作者:游戏探长 | 阅读:0在严格模式下,function.caller 和 arguments.caller 已经被彻底禁用。 只要一访问,就会直接抛出 TypeError。要启用严格模式,可以在脚本顶部或函数第一行写上 'use strict'。如果是为了调试调用关系,更稳妥的做法是改用开发者工具里的 Call Stack,或者通过 Error.stack 来查看。
Ja vaScript 的严格模式本身就把这条路封死了。 不需要再做额外限制。只要代码运行在严格模式下,function.caller 以及 arguments.caller 都不能被访问。一旦触碰,马上就会抛出 TypeError。
caller 在严格模式下被完全禁用
严格模式将 caller 视为不安全、易导致混淆的遗留特性。因此,无论它出现在函数内部还是外部,只要代码处于严格模式作用域,尝试读取或赋值 caller 都会失败。
function foo() {}的foo.caller在严格模式下访问,会报错TypeError: 'caller' is not accessible(具体提示因引擎而异)function bar() { return arguments.caller; }在严格模式函数中,执行时会立即抛出TypeError- 即使
caller出现在全局作用域(非函数内),只要脚本整体启用严格模式,也没有例外
确保严格模式生效是关键
caller 被禁用的前提,是代码确实在严格模式下运行。必须满足位置和语法要求。
- 全局启用:在脚本最顶部(前面不能有可执行语句)写
'use strict';或"use strict"; - 函数级启用:在函数体第一行写
'use strict';,该函数及其内部所有嵌套函数都受约束 - 注意:注释、空行、分号可以出现在
use strict前,但console.log()、变量声明等执行语句不行
替代 caller 的合理做法
caller 原本用于追溯调用栈,但现代开发中应避免依赖它。
- 调试时用浏览器开发者工具的 Call Stack 面板,清晰可靠
- 需要运行时调用信息时,可用
new Error().stack获取堆栈字符串(非标准但广泛支持) - 设计上尽量减少对调用者身份的硬依赖,改用参数传递或显式上下文对象
不需要特别“禁止”。 只要启用严格模式,caller 就自然失效。它的移除是严格模式的内置行为,不是靠检测或拦截实现的。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- JavaScript正则表达式批量处理HTML标签转义与替换方法
- 时间:2026-08-21
-
- JavaScript函数默认参数的精准JSDoc类型注解方法
- 时间:2026-08-21
-
- JavaScript设置Cookie的SameSite属性防范CSRF攻击
- 时间:2026-08-21
-
- JavaScript中BOM如何打开新的浏览器窗口标签
- 时间:2026-08-20
-
- JavaScript微任务队列在事件循环中的执行机制
- 时间:2026-08-20
-
- JavaScript中网络超时如何用流程控制实现中断
- 时间:2026-08-20
-
- JavaScript防抖函数原理与减少高频事件触发方法
- 时间:2026-08-20
-
- TypeScript六个颠覆认知的核心知识点解析
- 时间:2026-08-20
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
