(Из книги "Говоря на языке JavaScript").
Один из способов определения функции (ее декларация) выглядит так:
Определения функций обрабатываются раньше, чем остальной код. Это позволяет вызывать их в коде раньше, чем декларировать:
Вы
можете вызвать любую функцию в JavaScript с произвольным числом
аргументов. С этим проблем не будет. Это дает возможность сделать
доступными все аргументы посредством особой переменной
Давайте
используем нижеследующую функцию для того, чтобы исследовать, как
избыток или недостаток аргументов обрабатывается в JavaScript (функция
Вот как можно присвоить параметрам значения по умолчанию:
Арность — количество аргументов, или операндов. Слово образовалось
из названий предикатов небольшой арности (унарный — один аргумент,
бинарный — два, тернарный — три).
Если вы хотите принудительно усилить арность (всегда передавать строго определенное количество аргументов), вы можете проверять длину массива аргументов
Перемення
functionadd(param1,param2){returnparam1+param2;}
Этот код определяет функцию add, которая получает два параметра (param1 и param2) и возвращает их сумму. А вот как вызвать эту функцию:add(6, 1) // Вернет 7.
add('a', 'b') // Вернет 'ab'.
Другой способ создать функцию
add() - присвоить ее описание переменной add:
varadd=function(param1,param2){returnparam1+param2;};
Функции могут производить некое значение и передаваться в качестве параметров другим функциям:
someOtherFunction(function(p1,p2){...});
"Возвышающиеся" декларации функций
functionfoo(){bar();// OK, bar is hoistedfunctionbar(){...}}
Обратите внимание, что такими же свойствами обладает декларирование переменных (см. "Возвышающиеся" переменные), но не обращение к ним:functionfoo(){bar();// Not OK, bar is still undefinedvarbar=function(){// ...};}
Особая переменная arguments
arguments. Она выглядит как массив, но не обладает методами массива:function f() { return arguments }
var args = f('a', 'b', 'c');
args.length // Равно 3.
args[0] // Аргумент с индексом 0 это 'a'
Слишком много или слишком мало аргументов
toArray() показана в разделе Преобразование аргументов в массив):
functionf(x,y){console.log(x,y);returntoArray(arguments);}
Дополнительные параметры функции toArray() можно проигнорировать, за исключением параметра arguments:f('a', 'b', 'c') // Выведет a b, вернет [ 'a', 'b', 'c' ].
Недостающие параметры получают значение
undefined:f('a') // Выведет a undefined, вернет [ 'a' ].
f() // Выведет undefined undefined, вернет [].
Дополнительные параметры
functionpair(x,y){x=x||0;// (1)y=y||0;return[x,y];}
В строке (1) оператор || возвращает x если он истинен (не null, undefined, и т.д). В противном случае ему присваивается возвращается второй операнд (0):pair() // Вернет [ 0, 0 ]. pair(3) // Вернет [ 3, 0 ] pair(3, 5) // Вернет [ 3, 5 ]
Принудительная арность
Если вы хотите принудительно усилить арность (всегда передавать строго определенное количество аргументов), вы можете проверять длину массива аргументов
arguments.length:
functionpair(x,y){if(arguments.length!==2){thrownewError('Need exactly 2 arguments');}...}
Преобразование переменной arguments в массив
arguments это не массив в строгом смысле (см. Массивоподобные объекты и общие методы). Она имеет свойство length,
вы можете обращаться к ее элементам с помощью индексов в квадратных
скобках, но вы не можете удалять элементы или пользоваться методами
объектов типа Array. Поэтому иногда требуется преобразовать arguments в массив, чем и занимается нижеописанная функция (ее работа объясняется в разделе Массивоподобные объекты и общие методы):
functiontoArray(arrayLikeObject){returnArray.prototype.slice.call(arrayLikeObject);}
Комментариев нет:
Отправить комментарий