Javascript:是已弃用的参数数组

Javascript: is the arguments array deprecated?

本文关键字:参数 数组 Javascript      更新时间:2023-09-26

大多数网站都不赞成将callee作为Function.arguments的属性。但有些网站更进一步,说整个Functions.argument是不赞成的,例如https://web.archive.org/web/20130313045745/http://aptana.com/reference/api/Arguments.html。如果整个动作都失败了,为什么只提到callee ?我只是刚刚发现arguments,似乎非常有用,例如:http://hungred.com/how-to/secret-arguments-array-javascript/

Function.arguments 已被弃用,但它只是在支持函数中可用的普通arguments对象时才被弃用。(例如用x = arguments[i];代替x = theFunc.arguments[i];)

这是现在访问接收到的有序参数的首选方法(正如您所说,非常有用)。

Afaik arguments已弃用作为Function的属性。查看这个mdn链接,或者这个

Javascript参数array"-没有弃用,但我想说2021年过时了:

"arguments"关键字是保留的,不能用作形参名,也不能在函数体内用作局部变量。该特性的设计目的是允许在调用函数时使用任意数量的参数,而不必在函数定义中指定任意数量的参数。它也是一种过时的使用多个参数的方法,并且比现代的rest参数方法效率低。

下面是显示首选实践的示例:

function eat(...food) {
  for (let item in food) {
    console.log("eating " + item);
  } 
  // log the rest parameter
  console.log(food);
}
eat("eggs", "toast", "bacon");
// => eating eggs
// => eating toast
// => eating bacon
// => [ 'eggs', 'toast', 'bacon' ]
以上引用和代码示例来自一篇题为《JavaScript参数和参数》的文章

callee不推荐使用,但该参数在许多应用程序中使用。我不知道arguments是否被弃用了。您可以使用它来获取函数的所有参数,即使函数中没有定义(params)。

大多数时候我在开发jQuery插件时使用。例如:

$.fn.tooltip = function( method ) {
    if ( methods[method] ) {
      return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    
  };

正如您所看到的,只有method作为参数传递,但如果参数在第一个值之后分割,则在第一个参数中传递。这样你就可以传递一个函数名,以及该函数使用的所有参数。

完整示例:http://docs.jquery.com/Plugins/Authoring

不,arguments数组在最新5.1版本的规范中没有被弃用(参见第60页)。然而,caller对象只有在代码不是严格模式时才可用。