Передача аргументов по ссылке и по значению




Вызов функции и передача объекта по ссылке в функциях. Повторное использование функций.

Объявление и вызов функции

Объявить функцию можно при помощи ключевого слова function, за которым следует имя функции и список её аргументов, разделённых запятой и заключённый в скобки.

function funcName(arg1, arg2, /*... */ argN){

// dosomething

}

Любая ветка кода функции может содержать инструкцию return, которая прекращает выполнение функции. Указанное после этой инструкции значение возвращается функцией.

function sum(a, b){ return a + b; }   alert(“sum(1,2)”); // 3

Если же при вызове функции выполненная в ней ветвь кода не содержала ключевого слова return, то функция возвращает специальное значение undefined.

function f(){} alert(“f()”); // undefined

Способы вызова функций

Вызов функции как функции

пример

functionmyFunction(a, b) {
return a * b;
}
myFunction(10, 2); // myFunction(10, 2) will return 20

Когда функция вызывается без объекта владельца, значение this (ключевого слова) становится глобальным объектом.

В веб-браузере глобальным объектом является окно браузера.

Этот пример возвращает объект окна в качестве значения, this:

Пример

functionmyFunction() {
return this;
}
myFunction(); // Will return the window object

Вызов функции как метода

В JavaScript вы можете определить функцию в качестве методов объекта.

В следующем примере создается объект (myObject), с двумя свойствами (firstName и lastName) и способ (fullName):

Пример

varmyObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // Will return "John Doe"

Вызов функции в качестве метода объекта, вызывает значение this, в качестве самом объекта с помощью this тело функции ссылается на объект

Функция получает неявный аргумент- объект относительно которого была вызвана.

Вызов функции с помощью функции конструктора

Если вызов функции предшествует с new ключевым словом, он является конструктором вызова.

Похоже, вы создаете новую функцию, но поскольку функции JavaScript являются объектами, вы на самом деле создаете новый объект:

Пример

// This is a function constructor:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}

// This creates a new object
var x = new myFunction("John","Doe");
x.firstName; // Will return "John"

Конструктор вызов создает новый объект. Новый объект наследует свойства и методы от своего конструктора.

this ключевое слово вконструктор не имеет значения.
Значением this будет новый объект, созданный при вызове функции.

Вызов функции спомошщью методом функций call() и apply()

В JavaScript функции являются объектами. В JavaScript функции имеют свойства и методы.

call() и apply() предопределенные методы функции JavaScript. Оба метода могут быть использованы для вызова функции, и оба метода должны иметь объект владельцем в качестве первого параметра.

Пример

functionmyFunction(a, b) {
return a * b;
}
myObject = myFunction.call(myObject, 10, 2); // Will return 20

Пример

functionmyFunction(a, b) {
return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray); // Will also return 20

Оба метода принимают объект владельца в качестве первого аргумента. Единственное отличие состоит в том, что call() принимает аргументы функции по отдельности, и apply() принимает аргументы функции в массиве.

В JavaScript строгом режиме, первый аргумент становится значением this в вызываемой функции, даже если аргумент не является объектом.

В "нестрогой" режиме, если значение первого аргумента равно нулю или не определено, оно заменяется глобальным объектом.

С помощью call() или apply() вы можете установить значение this, и вызывать функцию как новый метод существующего объекта.

Передача аргументов по ссылке и по значению

Функции в JavaScript - это объекты. А объекты в JavaScript копируются по ссылке - это значит, что если у нас есть две переменные с одной и той же функцией - в них не лежит копия этой функции, а обе эти переменные ссылаются на одну и ту же функцию:

Передача в качестве аргумента функции значения по ссылке означает, что изменения, произведённые со значением аргумента в функции сохранятся после вызова функции. В этом случае в функцию передаётся ссылка и она, фактически, получает прямой доступ к области памяти, где хранится переменная.

Передача в качестве аргумента функции переменной по значению означает, что изменения,произведённые со значением этой переменной не сохраняться после вызова функции. В этом случае в функцию передаётся копия переменной.

В JavaScript нельзя задать каким образом значение будет передаваться в функцию, но важно запомнить, что ссылочные типы данных (массивы и объекты) передаются по ссылке, а примитивные (числа, строки и логические значения) передаются по значению.

Рассмотрим код, который иллюстрирует передачу значения по ссылке.

varpfun = sum; //Присваиваем ссылку на функцию

varres = pfun(1,3); //Вызываем функцию sum

function sum(arg1, arg2){

return arg1+arg2;

}

После такого присвоения функцию можно вызвать, используя в качестве имени функции имя переменной.

Функцию можно вызывать столько раз- сколько нужно- по имени.

functionfunc() {

return '!';

});

 

alert(func()); //результат

func();

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-22 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: