javascripting
Version:
Learn JavaScript by adventuring around in the terminal.
76 lines (53 loc) • 3.69 kB
Markdown
`Область видимости` описывает множество переменных, объектов, а также функций, к которым есть непосредственный доступ.
JavaScript обладает двумя областями видимости: `глобальной` и `локальной`. Переменная, объявленная снаружи функции, является `глобальной` переменной. Она доступна и изменяема из любого места вашей программы. При объявлении переменной внутри функции мы получаем `локальную` переменную. Она создаётся и удаляется каждый раз при вызове функции. К такой переменной нельзя получить доступ извне функции.
Функции, объявленные внутри других функций, известные также как вложенные (дочерние) функции, имеют доступ к области видимости родительской функции.
Обратите внимание на комментарии к приведённому ниже коду:
```js
const a = 4 // это глобальная переменная, она доступна для функций ниже
function foo () {
const b = a * 3 // к переменной `b` нет доступа снаружи функции `foo`, но к
// этой переменной имеют доступ функции, объявленные внутри `foo`
function bar (c) {
const b = 2 // ещё одна переменная `b` создана внутри области видимости
// функции `bar`, модификации этой новой переменной `b` никак не
// отразятся на объявленной выше переменной `b`
console.log(a, b, c)
}
bar(b * 4)
}
foo() // 4, 2, 48
```
Непосредственно выполняемая функция-выражение (IIFE) -- распространённый паттерн создания локальной области видимости.
Например:
```js
(function () { // объявление функции окружено круглыми скобками
// переменные, объявленные здесь,
// не будут доступны снаружи
})() // функция сразу же вызывается
```
## Условия задачи
Создайте файл `scope.js`.
Скопируйте в него следующий код:
```js
const a = 1; const b = 2; const c = 3;
(function firstFunction () {
const b = 5; const c = 6;
(function secondFunction () {
const b = 8;
(function thirdFunction () {
const a = 7; const c = 9;
(function fourthFunction () {
const a = 1; const c = 8
})()
})()
})()
})()
```
Используя полученные знания об `областях видимости`, разместите приведённый ниже код внутри одной из функций, объявленных в `scope.js` так, чтобы на выходе получилось `a: 1, b: 8, c: 6`.
```js
console.log(`a: ${a}, b: ${b}, c: ${c}`);
```
Чтобы удостовериться в правильности решения задачи, запустите следующую команду из терминала:
```bash
javascripting verify scope.js
```