Определение аргументов
Все функции имеют свой собственный объект аргументов для хранения параметров, которые он фактически получает, не ограничиваясь списком параметров, определенным при объявлении функции. Это не массив, но похож на массив. Он обладает такими же свойствами и методами доступа, что и массив. Он может получить доступ к значениям соответствующего отдельного параметра с помощью аргументов [n] и иметь длину атрибута массива. Но есть некоторые методы, которые не имеют массивов. Вы можете преобразовать аргументы в реальные массивы через вызов, а затем выполнить операции массива.
var args = array.prototype.slice.call (аргументы);
Класс массив
1. Определите, являются ли аргументы массивом
оповещение (аргументы экземпляра массива); Alert (Arguments Extance Of Object);
2. Как строго определить, что данные - это экземпляр класса массива (массив)
функция isArray (значение) {if (typeof array.isarray === "function") {return array.isarray (value); } else {return object.prototype.tostring.call (value) === "[object array]"; }}3. Преобразовать аргументы в массив
Метод 1: встроенные типы можно найти с помощью прототипа. Array.Prototype.Slice-это встроенный срез метода для доступа к массиву. Верните массив через метод среза. Вызов - это метод, который вызывает объект и заменяет текущий объект другим объектом.
var arg = array.prototype.slice.call (аргументы, 0);
Метод 2: Производительность хуже, чем метод 1, потому что сначала он создает массив, а затем продолжается.
var arg = [] .slice.call (аргументы, 0);
Метод 3: преобразовать в массив через петлю
функция toarray (аргументы) {var a = []; for (var i = 0; i <arguments.length; i ++) {a.unshift (аргументы. [i]); } вернуть a;}Вызывающий абонент
Когда функция вызывается другой функцией, вызывающая функция автоматически генерирует атрибут вызывающего абонента, указывая на объект функции, который его вызывает. Если функция не вызвана, вызывающий абонент нулевой.
function testcaller () {var caller = testcaller.caller; alert (caller);} функция acaller () {testcaller ();} acaller ();То, что появляется, так это содержание акальер функции.
Arguments.callee
Arguments.callee указывает на саму функцию выполнения и возвращает выполняемый объект функции, то есть тело указанного объекта функции.
ПРИМЕЧАНИЕ.
Получить фактические параметры функции через аргументы и получить формальные параметры функции через Arguments.callee.
Это также широко используется в закрытии.
var i = 0; Функция b (num) {if (num <10) {num ++; i ++; // Если есть параметры, Callee также должна принести параметры; Arguments.callee (num); } else {// output 2 alert ("call"+i+"callee!"); }} b (8); Применение аргументов. Калли в закрытии обеспечивает функцию рекурсивного вызова. // Используйте Arguments.callee для расчета фактория 10, например: 1 × 2 × 3 × 4 × 5 × 6 × 7 .... Функция C (x) {return x> 1? x * Arguments.callee (x - 1): 1} (10); // Выход 6 оповещение (C (3)); // Выход 3628800 Alert (C (10));Пример: Callee находит сумму 1-N
Функция fn (n) {if (n == 1) return n; else return n+arguments.callee (n-1);}Это позволяет анонимной функции вызвать себя
пример:
Список функций (тип) {var result = "<"+type+"l> <li>"; var args = array.prototype.slice.call (аргументы, 1); result += args.join ("</li> <li>"); Результат+= "</li> </"+type+"l>"; вернуть результат;} var listhtml = list ("o", "one", "два"); console.log (listml);Пример 2: Вопрос интервью: какова следующая консоль.
функция foo (x) {console.log (аргументы); return x;} foo (1,2,3,4); function foo (x) {console.log (аргументы); возврат x;} (1,2,3,4)Во время предварительной экспланации функция fn () {} (1); будет обработан отдельно и делен на две функции, первая - это функция fn () {}, а вторая - анонимная функция: (1). Если у второго нет параметров, будет сообщена ошибка, но вышеупомянутая функция включена в (), что является правильным.
(function fn () {console.log (аргументы);} (1,2,3,4)); (function foo (x) {console.log (Arguments); return x;}) (1,2,3,4) function foo () {bar.apply (null, аргументы);} function bar (x) {консоль ();