【问题标题】:In Javascript strict mode can you assign arguments to another var?在 Javascript 严格模式下,您可以将参数分配给另一个 var 吗?
【发布时间】:2013-12-06 08:05:36
【问题描述】:

我正在尝试通过 Sonar 验证 Javascript 代码,我对 严格模式 规则有一些疑问。

我正在验证的规则是关于 "eval" and "arguments" behavior in strict mode

在阅读此规则描述时,我似乎无法将 arguments 分配给新变量以便稍后或在循环中访问它。

在阅读strict mode on Firefoxstrict mode on IE 的一些文档时,我发现的规则基本上是(适用于这种情况):

  1. 我不能有任何名为 arguments 的变量/函数/等,因为这是一个保留字。
  2. 参数不能绑定

但是,上面的示例代码似乎违反了 Sonar 规则

var args = arguments;

那么,这是误报还是这段代码违反了严格模式

【问题讨论】:

  • 你为什么认为这是在验证规则?
  • 我觉得不违反strict mode,你可以拥有。
  • 不违反,你可以在开发者工具的console中自己查看。
  • var args = arguments 绑定 args,而不是 arguments。您链接的声纳页面禁止绑定arguments,它似乎与 ECMAScript5 规范一致。 (ecmascript.org/docs/tc39-2009-043.pdf,第 233 页)
  • 如果只是为了安全而不检查是否在任何地方使用了 args,我不会感到惊讶。我敢打赌,他们假设 args 会被改变,所以你不能为任何东西分配参数。

标签: javascript strict


【解决方案1】:

根据用户的回答和一些研究,我发现此代码 (var args = arguments;) 有效,因为它不修改参数,而只是分配它到另一个变量。

请注意,由于args 现在指向arguments,它也不能被修改。但是可以正常读取。

更新: Fix will be available 在新发布的 Javascript 插件 (1.5) 下。

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    相关资源
    最近更新 更多