【发布时间】:2013-12-06 08:05:36
【问题描述】:
我正在尝试通过 Sonar 验证 Javascript 代码,我对 严格模式 规则有一些疑问。
我正在验证的规则是关于 "eval" and "arguments" behavior in strict mode。
在阅读此规则描述时,我似乎无法将 arguments 分配给新变量以便稍后或在循环中访问它。
在阅读strict mode on Firefox 和strict mode on IE 的一些文档时,我发现的规则基本上是(适用于这种情况):
- 我不能有任何名为 arguments 的变量/函数/等,因为这是一个保留字。
- 参数不能绑定
但是,上面的示例代码似乎违反了 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