JavaScript Вызов функции
Код внутри JavaScript function будет выполняться, когда "что-то" его вызывает.
Вызов функции JavaScript
Код внутри функции не выполняется, когда функция определена.
Код внутри функции выполняется при вызове функции.
Обычно используется термин "вызвать функцию" вместо "вызов функции".
Также часто говорят "вызвать функцию", "запустить функцию" или "выполнить функцию".
В этом руководстве мы будем использовать вызов, потому что функция JavaScript может быть вызвана без вызова.
Вызов функции как функции
Пример
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); //
вернет 20
Попробуйте сами »
Вышеупомянутая функция не принадлежит ни к какому объекту. Но в JavaScript всегда есть глобальный объект по умолчанию.
В HTML глобальным объектом по умолчанию является сама HTML-страница, поэтому функция выше "принадлежит" HTML-странице.
В браузере объектом страницы является window браузера. Вышеупомянутая функция автоматически становится window функцией.
myFunction() и window.myFunction() - это одна и та же функция:
Пример
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2); // Также вернет 20
Попробуйте сами »
Это распространенный способ вызова функции JavaScript, но это не очень хорошая практика.
Глобальные переменные, методы или функции могут легко создавать конфликты имен и ошибки в глобальном объекте.
Ключевое слово this
В JavaScript то, что называется this - это объект, которому "принадлежит" текущий код.
Значение - this, когда используется в функции, является объектом, который "владеет" функцией.
Обратите внимание, что this это не переменная.
Это ключевое слово. Вы не можете изменить значение this.
Совет: Подробнее о this ключевом слове читайте в Ключевое слово this JS.
Глобальный объект
Когда функция вызывается без объекта владельца, значение this становится глобальным объектом.
В веб-браузере глобальным объектом является окно браузера.
В этом примере объект окна возвращается как значение this:
Пример
var x = myFunction();
// x будет window объектом
function myFunction() {
return this;
}
Попробуйте сами »
Вызов функции как глобальной функции приводит к тому, что значение this становится глобальным объектом.
Использование объекта window в качестве переменной может легко привести к сбою вашей программы.
Вызов функции как метода
В JavaScript вы можете определять функции как методы объекта.
В следующем примере создается объект (myObject), с двумя свойствами (firstName и lastName), и методом (fullName):
Пример
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // Вернет "John Doe"
Попробуйте сами »
Метод fullName - это функция. Функция принадлежит объекту. myObject - владелец функции.
Вызываемая this, - это объект, который "владеет" кодом JavaScript.
В этом случае значение this является myObject.
Проверь это! Измените метод fullName, чтобы он возвращал значение this:
Пример
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this;
}
}
myObject.fullName(); // Вернет [объект Object] (объект владелец)
Попробуйте сами »
Вызов функции как объектного метода приводит к тому, что значением this становится сам объект.
Вызов функции с помощью конструктора функций
Если вызову функции предшествует new ключевое слово, это вызов конструктора.
Похоже, вы создаете новую функцию, но поскольку функции JavaScript являются объектами, вы фактически создаете новый объект:
Пример
// Это конструктор функции:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// Это создает новый объект:
var x = new myFunction("John", "Doe");
x.firstName;
// Вернет "John"
Попробуйте сами »
Вызов конструктора создает новый объект. Новый объект наследует свойства и методы своего конструктора.
Ключевое слово this в конструкторе не имеет значения.
Значением this будет новый объект, созданный при вызове функции.
