【问题标题】:Are there js environments which support strict mode only?有只支持严格模式的js环境吗?
【发布时间】:2016-08-23 17:20:45
【问题描述】:

我目前正在开发一个依赖于arguments.callee.caller 的库。这与"use strict" 不兼容,因此在以严格模式定义调用函数时会引发错误。我发现了这些错误,它们并不重要,因为重要的部分不是在严格模式下定义的。有没有只支持严格模式的环境,所以不兼容这个lib?

【问题讨论】:

  • 如果您想知道的话,可以使用命令行标志强制节点在严格模式下执行所有代码。
  • 你需要.caller做什么?
  • @Bergi 谢谢!我想知道类似的事情。 :-) 我使用调用者在非 v8 环境中执行 Error.captureStackTrace(o, fn) 之类的操作:github.com/inf3rno/e3/blob/master/lib/stackAdapter/StackAdapter/… 我目前正在测试 arguments.callee.caller 以进行优雅降级,但该测试无法通过严格模式捕获错误。我需要修改它。
  • @Bergi 是否有任何非节点环境强制执行严格模式?或者至少有一个浏览器不支持arguments.callee.caller,但支持ES5?当前代码通过node和chrome使用Error.prepareStackTrace(),所以不受影响。
  • 如果arguments.callee 没有被各种 lint 工具之一捕获,我会感到惊讶。

标签: javascript strict-mode


【解决方案1】:

有只支持严格模式的环境吗?

您可以配置 Node.js 来执行此操作,请参阅 Any way to force strict mode in node?:

node --use_strict

【讨论】:

    【解决方案2】:

    任何现代 JS 环境在certain ES6 contexts 的上下文中总是有严格模式。即:

    • 模块代码始终是严格模式代码。
    • ClassDeclarationClassExpression 的所有部分都是严格模式代码。

    当然,这里真正的答案是如果你想成为未来的证明,就不要使用arguments.callee.caller

    但是如果你想避免严格的模式限制,你可以通过命名函数直接访问Function.caller。强烈建议不要这样做,因为它是非标准功能。

    【讨论】:

      猜你喜欢
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 2021-05-29
      • 2013-04-24
      • 1970-01-01
      相关资源
      最近更新 更多