Учебник по JS

ГЛАВНАЯ JS Введение JS Куда Вывод JS Заявления JS JS-синтаксис JS-комментарии JS-переменные JS Пусть Константа JS JS-операторы JS-арифметика Назначение JS JS-типы данных JS-функции JS-объекты JS-события JS-строки Строковые методы JS Поиск строки JS Шаблоны строк JS JS-номера Методы номеров JS JS-массивы Методы массива JS Сортировка массива JS Итерация массива JS Константа массива JS JS-даты Форматы даты JS Методы получения даты JS Методы установки даты JS JS-математика JS Случайный JS Булевы значения Сравнение JS JS-условия JS-переключатель JS цикл для Цикл JS для входа Цикл JS для Цикл JS во время Перерыв JS JS-итерации JS-наборы JS-карты JS Typeof Преобразование типов JS JS побитовый JS регулярное выражение JS-ошибки Область JS JS-подъем Строгий режим JS JS это ключевое слово Функция стрелки JS JS-классы JS JSON JS-отладка Руководство по стилю JS Лучшие практики JS JS-ошибки JS-производительность Зарезервированные слова JS

JS-версии

JS-версии JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE/пограничный История JS

JS-объекты

Определения объектов Свойства объекта Методы объекта Отображение объекта Средства доступа к объектам Конструкторы объектов Прототипы объектов Итерации объектов Наборы объектов Карты объектов Ссылка на объект

JS-функции

Определения функций Параметры функции Вызов функции Вызов функции Функция Применить Закрытие функций

JS-классы

Введение в класс Наследование классов Статический класс

JS асинхронный

Обратные вызовы JS JS асинхронный JS-обещания JS асинхронный/ожидание

JS HTML DOM

Дом Введение DOM-методы Документ DOM DOM-элементы DOM HTML DOM-формы ДОМ CSS DOM-анимации События ДОМ Слушатель событий DOM DOM-навигация DOM-узлы Коллекции DOM Списки узлов DOM

Спецификация браузера JS

JS-окно JS-экран Местоположение JS История JS JS-навигатор Всплывающее оповещение JS JS Тайминг JS-куки

JS-веб-API

Введение в веб-API API веб-форм API истории веб-поиска API веб-хранилища API веб-работника API веб-выборки API веб-геолокации

JS АЯКС

Введение в АЯКС AJAX XMLHttp АЯКС-запрос AJAX-ответ XML-файл AJAX АЯКС PHP АЯКС АСП База данных AJAX AJAX-приложения Примеры AJAX

JS JSON

Введение в JSON Синтаксис JSON JSON против XML Типы данных JSON Анализ JSON Строковая JSON JSON-объекты JSON-массивы JSON-сервер JSON PHP JSON HTML JSON JSONP

JS против JQuery

Селекторы jQuery JQuery HTML jQuery CSS JQuery DOM

JS-графика

JS-графика JS Холст JS сюжет JS Chart.js JS Google Диаграмма JS D3.js

JS-примеры

JS-примеры JS HTML DOM JS HTML-ввод HTML-объекты JS HTML-события JS JS-браузер JS-редактор JS-упражнения JS-викторина JS-сертификат

JS-ссылки

Объекты JavaScript HTML DOM-объекты


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


Код внутри JavaScript functionбудет выполняться, когда «что-то» вызывает его.


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

Код внутри функции не выполняется, когда функция определена .

Код внутри функции выполняется при вызове функции .

Обычно используется термин « вызов функции » вместо «вызов функции ».

Также принято говорить «вызвать функцию», «запустить функцию» или «выполнить функцию».

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


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

Пример

function myFunction(a, b) {
  return a * b;
}
myFunction(10, 2);           // Will return 20

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

В HTML глобальным объектом по умолчанию является сама HTML-страница, поэтому приведенная выше функция «принадлежит» HTML-странице.

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

myFunction() и window.myFunction() — это одна и та же функция:

Пример

function myFunction(a, b) {
  return a * b;
}
window.myFunction(10, 2);    // Will also return 20

Это распространенный способ вызова функции JavaScript, но не очень хорошая практика.
Глобальные переменные, методы или функции могут легко создавать конфликты имен и ошибки в глобальном объекте.



это ключевое слово

В JavaScript вещь, называемая this, является объектом, который «владеет» текущим кодом.

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

Обратите внимание, что thisэто не переменная. Это ключевое слово. Вы не можете изменить значение this.

Совет: Узнайте больше о thisключевом слове в JS this Keyword .


Глобальный объект

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

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

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

Пример

let x = myFunction();            // x will be the window object

function myFunction() {
  return this;
}

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


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

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

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

Пример

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

Метод fullName является функцией. Функция принадлежит объекту. myObject является владельцем функции.

То, что называется this, — это объект, который «владеет» кодом JavaScript. В этом случае значением this является myObject .

Попробуй это! Измените метод fullName , чтобы он возвращал значение this:

Пример

const myObject = {
  firstName:"John",
  lastName: "Doe",
  fullName: function () {
    return this;
  }
}

// This will return [object Object] (the owner object)
myObject.fullName();

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


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

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

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

Пример

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

// This creates a new object
const myObj = new myFunction("John", "Doe");

// This will return "John"
myObj.firstName;

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

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