在JavaScript中使用名为"arguments"的参数是否可以?

Joe*_*Joe 5 javascript naming

我正在编写一个公开以下函数的库

function call(instance, func, arguments) {
  return {
    call: {
      instance: instance,
      func: func,
      arguments: arguments
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

名称arguments可以使用吗?它确实是最好的名字,但我不想与内置变量发生冲突.它适用于Node.这适用于所有浏览器和JavaScript环境吗?

编辑:

请注意,上述函数在Node中按预期工作.我想知道这是否会在任何地方都有用.

除非有技术原因,否则我宁愿不重命名.我真的很喜欢这个面向外部的函数和文档来反映这个参数名称,因为返回的对象将被序列化为JSON并用于跨语言.

Jac*_*son 7

可以arguments在"草率模式"中使用该名称,但不推荐使用.

在严格模式下禁止使用,如果作者关心代码质量,所有新代码都应该使用.

function a(arguments) {
    console.log(arguments);
}
a(1);
// Prints "1"

(function () {
    'use strict';
    function a(arguments) {
        console.log(arguments);
    }
    a(1);
}());
// Uncaught SyntaxError: Unexpected eval or arguments in strict mode
Run Code Online (Sandbox Code Playgroud)

这类似于命名变量"Object".也许在一些模糊的上下文中使用该名称是有意义的,但通过这样做,您将无法访问全局Object对象和有用的方法Object.keys.同样,通过做出这个糟糕的命名决定,你就不能再操纵arguments对象,这就是JS中的varargs.

为了提高代码的可维护性,最好避免像这样创建滴答时间炸弹.有一个很好的理由说明它不允许在严格的模式下:它可能会给任何想要使用arguments它的人造成痛苦,因为它通常被使用.