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