Javascript 是否有只支持严格模式的js环境?
我目前正在开发一个lib,它依赖于Javascript 是否有只支持严格模式的js环境?,javascript,strict-mode,Javascript,Strict Mode,我目前正在开发一个lib,它依赖于参数.callee.caller。这与“use strict”不兼容,因此在严格模式下定义调用方函数时会引发错误。我发现了这些错误,它们其实并不重要,因为重要部分并没有在严格模式下定义。是否有一个环境只支持严格模式,因此与此库不兼容?任何现代JS环境在的上下文中都将始终具有严格模式。即: 模块代码始终是严格的模式代码 类声明或类表达式的所有部分都是严格的模式代码 当然,这里真正的答案是如果你想成为未来的证明,不要使用参数.callee.caller 但是,如
参数.callee.caller
。这与“use strict”
不兼容,因此在严格模式下定义调用方函数时会引发错误。我发现了这些错误,它们其实并不重要,因为重要部分并没有在严格模式下定义。是否有一个环境只支持严格模式,因此与此库不兼容?任何现代JS环境在的上下文中都将始终具有严格模式。即:
- 模块代码始终是严格的模式代码
- 类声明或类表达式的所有部分都是严格的模式代码
参数.callee.caller
但是,如果希望避免严格的模式限制,可以直接使用命名函数进行访问。这是非常不鼓励的,因为这是一个非标准特性
是否存在只支持严格模式的环境
您可以配置Node.js来完成此操作,请参见:
如果您想知道,可以使用命令行标志强制Node在严格模式下执行所有代码。您需要
.caller
做什么?@Bergi谢谢!我想知道类似的事情。:-)我使用调用者执行类似于错误的操作。captureStackTrace(o,fn)
在非v8环境中执行:我当前测试参数。callee.caller
执行优雅降级,但该测试不会通过严格模式捕获错误。我需要修改它。@Bergi是否有强制严格模式的非节点环境?或者是否至少有一个浏览器不支持arguments.callee.caller,但支持ES5?当前代码通过节点和chrome使用Error.prepareStackTrace()
,因此它们不受影响。如果参数.callee
未被各种lint工具捕获,我会感到惊讶。
node --use_strict