Javascript: массив аргументов устарел?

Большинство сайтов говорят, что "вызываемый" как свойство Function.arguments устарела. Но некоторые сайты идут дальше и говорят, что весь Functions.argument устарел, например, http://aptana.com/reference/api/Arguments.html Зачем упоминать вызываемого абонента, если вся рутина мертва в воде? Я только что обнаружил "аргументы", и это кажется невероятно полезным, например: http://hungred.com/how-to/secret-arguments-array-javascript/

5 ответов

Решение

Function.arguments устарела, но устарела только в пользу ванили arguments объект, который доступен внутри функции. (например, используя x = arguments[i]; вместо x = theFunc.arguments[i];)

Теперь это предпочтительный (и, как вы говорите, чрезвычайно полезный) метод для доступа к полученным порядковым аргументам.

Насколько мне известно arguments не рекомендуется как свойство Function. Смотрите эту MDN-ссылку или эту

«Массив аргументов» Javascript — не устарел, но я бы сказал, устарел по состоянию на 2021 год:

Ключевое слово «аргументы» зарезервировано и не может использоваться в качестве имени параметра или в теле функции в качестве локальной переменной. Эта функция была разработана, чтобы разрешить произвольное количество аргументов при вызове функции без необходимости указывать произвольное количество параметров в определении функции. Это также устаревший способ использования нескольких аргументов и менее эффективный, чем современный метод остальных параметров.

Вот пример, показывающий предпочтительную практику:

      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».

Нет, массив arguments не считается устаревшим в последней версии спецификации 5.1 (см. Стр. 60). caller Однако объект будет доступен, только если код не находится в строгом режиме.

Callee устарела, но аргументы используются во многих приложениях. Я не знаю, если аргументы устарели. Вы можете использовать его для получения всех параметров функции, даже если они не определены внутри функции ( 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' );
    }    
  };

Как видите, в качестве параметра передается только метод, но внутри первого, если аргументы разделяются после первого значения. Таким образом, вы можете передать имя функции и все параметры, используемые этой функцией.

Полный пример: http://docs.jquery.com/Plugins/Authoring

Другие вопросы по тегам