Javascript:参数数组是不是已弃用?

Posted

技术标签:

【中文标题】Javascript:参数数组是不是已弃用?【英文标题】:Javascript: is the arguments array deprecated?Javascript:参数数组是否已弃用? 【发布时间】:2011-12-28 14:32:27 【问题描述】:

大多数网站都说“被调用者”作为 Function.arguments 的属性已被弃用。但是有些网站走得更远,说整个 Functions.argument 已被弃用,例如http://aptana.com/reference/api/Arguments.html 如果整个例程都死在水中,为什么只提到被调用者?我刚刚发现“论点”,它似乎非常有用例如:http://hungred.com/how-to/secret-arguments-array-javascript/

【问题讨论】:

【参考方案1】:

Function.arguments 已被弃用,但它仅被弃用,以支持函数中可用的 vanilla arguments 对象。 (例如,使用x = arguments[i]; 而不是x = theFunc.arguments[i];

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

【讨论】:

这是有道理的。如果 Javascript 想要一些多线程支持,那么这种全局有状态对象就会被扼杀。 为什么 Function.arguments 被弃用了?它允许您直接访问嵌套函数内的父函数的参数,这是 arguments 对象无法做到的。 我在 ***.com/a/49544338/539149 发布了针对 Node.js 和浏览器的解决方法 getArguments() 函数,因为 ***.com/a/49544338/539149 缺少功能【参考方案2】:

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

我大部分时间都是在开发 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' );
        
  ;

如您所见,只有方法作为参数传递,但如果参数在第一个值之后拆分,则在第一个值内。这样你就可以传递一个函数名,以及这个函数使用的所有参数。

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

【讨论】:

【参考方案3】:

不,参数数组在最新的 5.1 版规范中没有被弃用(参见第 60 页)。但是,caller 对象仅在代码未处于严格模式时才可用。

【讨论】:

【参考方案4】:

Afaik arguments 已弃用作为 Function 的属性。见this MDN-link,或this one

【讨论】:

以上是关于Javascript:参数数组是不是已弃用?的主要内容,如果未能解决你的问题,请参考以下文章

asyncio 中所有这些已弃用的“循环”参数是啥?

警告:isMounted(...) 在纯 Javascript 类中已弃用

DTD 是不是已弃用?

推荐替换已弃用的 call_user_method?

macOS 上的 OpenGL 是不是已弃用?

PayPal ExpressCheckout 是不是已弃用?