Функции

# Функция с определенным кол-вом параметров
function f(a, b, c, d) { console.log(a + b + c + d) }
 
# Обычный способ вызова
f(1, 2, 3, 4);
 
# f.call()
# Метод call жёстко фиксирует количество аргументов, через запятую
f.call(context, 1, 2, 3, 4);
 
# Вызов функции при помощи func.apply работает аналогично func.call, но принимает массив аргументов вместо списка:
f.apply(context, [1, 2, 3, 4]);

При помощи call/apply можно легко взять метод одного объекта, в том числе встроенного, и вызвать в контексте другого.

function sayHi() {
 
  # Используем эту технику для упрощения манипуляций с arguments. Как мы знаем, это не массив, а обычный объект.. Но как бы хотелось вызывать на нём методы массива.
  arguments.join = [].join; // одолжили метод (1)
 
  var argStr = arguments.join(':');  // (2)
 
  alert(argStr);  // сработает и выведет 1:2:3
 
}
 
sayHi(1, 2, 3);

Лямбда функции

+function(y){
return y+1;
}(6);