Важно понимать, что появление декларации функции в тексте сценария не означает ее немедленного выполнения; тело функции будет выполняться только тогда, когда какой-либо оператор будет содержать вызов этой функции. Например, функция из предыдущего примера может быть вызвана так:
var x = cube(5);
В результате переменная x получит значение 125. В JavaScript действуют следующие правила передачи аргументов функции:
  • Аргументы примитивных типов передаются функции по значению. Иными словами, формальным аргументам присваиваются значения фактических аргументов на момент вызова и, если даже операторы в теле функции изменят значение какого-либо аргумента, то это изменение не коснется переменной, чье значение передавалось в качестве аргумента.
  • Объекты (и встроенные, и определенные пользователем) передаются по ссылке. Это означает, что все изменения свойств объекта в теле функции производятся непосредственно в самом объекте, а не в его локальной копии и, следовательно, сохраняются после возврата из функции. Например,
function setBrowser(browser) {
   browser.name = "Internet Explorer";
   browser.version = "5.5";
}

var myBrowser = {name:"Netscape Navigator", version:"4.7"};
var x = myBrowser.name;	// x равно "Netscape Navigator"
setBrowser(myBrowser);	// объект myBrowser передается функции
var y = myBrowser.name;	// y равно "Internet Explorer"