JavaScript Виклик функції
Код у JavaScript function
виконуватиметься, коли "щось" її викликає.
Виклик JavaScript функції
Код усередині функції не виконується, якщо функцію визначено.
Код усередині функції виконується під час виклику функції.
Поширеним є використання терміну "звернення до функції" замість "викликати функцію".
Також прийнято говорити "звертатись до функції", "запуск функції" або "виконання функції".
У цьому посібнику ми будемо використовувати виклик функції, оскільки функцію JavaScript можна викликати без звернення.
Виклик функції як функції
Наведена вище функція не належить жодному об’єкту. Але в JavaScript завжди є глобальний об’єкт за умовчанням.
У HTML стандартним глобальним об’єктом є сама сторінка HTML, тому функція вище "належить" сторінці HTML.
У браузері об’єктом сторінки є вікно браузера. Функція вище автоматично стає функцією вікна.
Примітка
Це поширений спосіб виклику функції JavaScript, але не дуже гарна практика.
Глобальні змінні, методи чи функції можуть легко спричинити конфлікти імен і помилки в глобальному об’єкті.
myFunction() та window.myFunction() - одна і та сама функція:
Приклад
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2); // також поверне 20
Спробуйте самі »
Що таке this?
У JavaScript ключове слово this
посилається на об’єкт.
Який об’єкт залежить від того, як this
викликається (використовується або називається).
Ключове слово this
відноситься до різних об’єктів залежно від способу його використання:
У методі об’єкта this посилається на об’єкт. |
Окремо this стосується глобального об’єкта. |
У функції this посилається на глобальний об’єкт. |
У функції в строгому режимі this є undefined . |
У події this посилається на елемент, який отримав подію. |
Такі методи, як call() , apply() та bind() можуть відносити this до будь-якого об’єкту. |
Примітка
this
не є змінною. Це ключове слово. Ви не можете змінити значення this
.
Дивіться також:
Глобальний об’єкт
Коли функція викликається без власного об’єкта, значення this
стає глобальним об’єктом.
У веббраузері глобальним об’єктом є вікно браузера.
Цей приклад повертає об’єкт вікна як значення this
:
Приклад
let x = myFunction(); // x буде об’єктом вікна
function myFunction() {
return this;
}
Спробуйте самі »
Виклик функції як глобальної функції призводить до того, що значення this стає глобальним об’єктом.
Використання об’єкта window як змінної може легко привести до збою вашої програми.
Виклик функції як методу
У JavaScript ви можете визначити функції як методи об’єктів.
У наступному прикладі створюється об’єкт (myObject) із двома властивостями (firstName та lastName), і методом (fullName):
Приклад
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // Поверне "John Doe"
Спробуйте самі »
Метод fullName є функцією. Функція належить об’єкту. myObject є власником функції.
Те, що називається this
, є об’єктом, який "володіє" JavaScript кодом. У цьому випадку значення this
становить myObject.
Перевірте це! Змініть метод fullName, щоб повернути значення this
:
Приклад
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this;
}
}
// Це поверне [object Object] (об’єкт власника)
myObject.fullName();
Спробуйте самі »
Виклик функції як методу об’єкта призводить до того, що значення this
стає самим об’єктом.
Виклик функції за допомогою конструктора функції
Якщо виклику функції передує ключове слово new
, це виклик конструктора.
Здається, ви створюєте нову функцію, але оскільки функції JavaScript є об’єктами, ви фактично створюєте новий об’єкт:
Приклад
// Це конструктор функцій:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// Це створює новий об’єкт
const myObj = new myFunction("John", "Doe");
// Це поверне "John"
myObj.firstName;
Спробуйте самі »
Виклик конструктора створює новий об’єкт. Новий об’єкт успадковує властивості та методи від свого конструктора.
Ключове слово this
у конструкторі не має значення.
Значення this
буде новий об’єкт, створений під час виклику функції.