代码之家  ›  专栏  ›  技术社区  ›  Raynos

Javascript命名函数参数vs参数对象

  •  4
  • Raynos  · 技术社区  · 14 年前

    如果我有这样的功能:

    function doStuff(arg) {
       arguments[0] = "4" + arg;
       console.log(arg);
       console.log.apply(null, arguments);
    }
    

    很明显 doStuff("name")

    arg arguments[0] 指向同一件事?我可以互换使用吗。javascript在内部做了什么我应该知道的事情吗?有什么问题吗?

    我知道参数处理所有传递的参数,而不仅仅是命名参数。我只关心它如何处理第一个(或第n个)参数。

    [编辑]

    我其实是在用这个来

    function name(arg) {
       arguments[1] = args;
       arguments[0] = "[INFO] " + args.callee + " arg: %o";
       console.log.apply(this, arguments);
    }
    

    name(arguments) 在函数本身中。有趣的是参数被叫方打印出函数源代码,而不是函数名。

    3 回复  |  直到 8 年前
        1
  •  3
  •   annakata    14 年前

    参数“array”存在于任何函数上下文中,并枚举当前上下文调用接收的参数。是参数[0]引用给定的第一个参数,因此如果将其标记为“name”,则它将是相同的。

    Arguments对于处理未定义数量的参数(即param list)、元编程非常强大,甚至在您想施加一些启发来确定哪些参数代表什么样的数据(即您不信任实现者)的情况下也是如此,但至少可以说,这是一个相当有限的用例。

    我强烈建议您避免依赖arguments数组,原因有两个:

    真正地 事项。

    here ).

    我不知道内部有什么问题。

        2
  •  2
  •   William Niu    14 年前
        3
  •  2
  •   Tim Down    14 年前

    对, arguments[0] arg 指向同一件事,改变一件事就会改变另一件事。ECMAScript 5(目前正逐渐进入主流浏览器)稍微改变了一些事情:在严格模式下,命名参数和 arguments 对象更松散,因为 论据 只是命名参数的副本。来自ECMAScript 5的第10.6节: