Важно понимать, что появление декларации функции в тексте сценария не означает ее немедленного выполнения; тело функции будет выполняться только тогда, когда какой-либо оператор будет содержать
вызов этой
функции. Например, функция из предыдущего примера может быть вызвана так:
В результате переменная
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"