Объекты - очень важный основополагающий термин в JavaScript. Нам необходимо понять, о чём мы говорим, когда произносим слово "объект" в отношении JS.
Пара Имя/Значение (Name/Value) - это имя, которому соответствует уникальное значение. Это имя может быть объявлено не единожды, но может иметь только одно значение в каждом конкретном контексте.
Помните, в прошлом уроке мы говорили о контексте выполнения?
В каждом конкретном контексте выполнения, т.е. части выполняющегося кода, имя может быть объявлено с одним значением.
При этом значением могут быть другие пары Имя/Значение.
user = 'qqc'
- пара Имя/Значение, где user
- имя (переменная), а qqc
- значение.
Объект - коллекция пар Имя/Значение.
Это простейшее возможное в рамках JS определение объекта. В других языках программирования это может быть немного сложнее, но мы сейчас изучаем JavaScript, и здесь это так.
Например, у меня есть имя, а у этого имени есть значение. Этим значением могут быть другие пары Имя/Значение.
Например:
user:
{
username: 'qqc',
reputation: 67,
metadata:
{
"user_image": "../photo.jpg",
"ico_address": "1DLTAEv9PuiX1sFQz51hvZWwZaJcTuUCWh"
}
}
До этого user
- было у нас просто именем в паре Имя/Значение, здесь же user
- по-прежнему, имя, но значение - коллекция пар Имя/Значение. username: 'qqc'
и reputation: 67
- пары Имя/Значение, metadata
- имя, значению которой соответствует другой список пар имен и значений.
Это и есть объект в JavaScript. Т.е. когда мы говорим об объектах JavaScript, мы имеем ввиду коллекции таких пар Имя/Значение. Получается, что metadata
- это тоже коллекция и, соответственно, тоже объект. И user
- объект.
Теперь давайте посмотрим, что такое глобальное окружение и глобальный объект.
Когда код начинает выполнятся в JavaScript, он выполняется внутри контекста выполнения. Базовым контекстом выполнения в JS является глобальный. То, к чему есть доступ откуда-либо, для чего-либо в вашем коде, является глобальным.
Глобальный контекст выполнения содержит две вещи: глобальный объект и специальную переменную this
.
Посмотрим на примере... Давайте создадим новый проект, в котором у нас будут два файла: index.html
и app.js
. В HTML-файл вставим следующий код:
<html>
<head>
</head>
<body>
<script src="app.js"></script>
</body>
</html>
Это самая простая HTML-страничка, к которой подключен JS-файл - app.js
. Создали файл app.js
? И давайте попробуем запустить ваш проект.
Несмотря на то, что файл app.js
пустой, он был подгружен браузером, синтаксический парсер запущен. Но так как файл, хоть и пустой, запущен, создался контекст выполнения. А значит, были созданы глобальный объект и та самая переменная this
.
Давайте откроем консоль в инструментах разработчика в браузере. Отсюда у нас есть доступ к контексту выполнения. Попробуем написать this
, чтобы посмотреть, что это такое.
Получается, движок JS создал контекст выполнения, глобальный объект и переменную this
, указав чему она равна. В нашем случае, это вкладка браузера, в которой запустился наш проект.
Также был создан глобальный объект - window
. Попробуйте написать в консоли window
, чтобы посмотреть, что это.
Наш контекст выполнения был создан на глобальном уровне, где глобальный объект window
и переменная this
равны.
Давайте попробуем добавить пару строк кода в наш app.js
:
var a = 'Hello Golos!';
function b() {
}
Мы создали переменную a
и функцию b
. Запустим приложение и посмотрим, что у нас получилось.
Введем в консоли window
, раскроем результат и полистаем вниз. Нашли нашу переменную и функцию? В JavaScript, когда вы создаете переменные и функции не внутри функции, они подключаются к глобальному объекту.
Глобальный = не внутри функции
Вы можете вызвать ваши переменные и функции (которые не внутри функции), набрав их имена в консоли:
Существует еще внешнее окружение. Когда вы запускаете код внутри функции, внешним окружением будет то, что окружает код за пределами функции. Таким образом, если код создается на глобальном уровне, внешнего окружения для него не существует.
Привет!
Этот пост был выбран Академией Голоса и попал в список программы поддержки качественных образовательных постов.
Ссылка на твой пост будет опубликована в отчете Академии.
Спасибо за полезный контент (ノ◕ヮ◕)ノ*:・゚✧
Спасибо за полезную информацию.