UNPKG

javascripting

Version:

Learn JavaScript by adventuring around in the terminal.

76 lines (53 loc) 3.69 kB
`Область видимости` описывает множество переменных, объектов, а также функций, к которым есть непосредственный доступ. 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 ```