#8 Область видимости в Javascript

poster
В этом уроке мы с вами поговорим о глобальных и локальных переменных. А именно, об области видимости переменных.
Понравилось? Поделитесь с друзьями!
Понравилось?
Поделитесь с друзьями!
Комментарии
Текст видео

В этом уроке мы с вами поговорим о глобальных и локальных переменных. А именно, об области видимости переменных.

И это все зависит от того, где вы создаете переменную. Когда вы создаете переменную в javascript, то она становится глобальной переменной, так как попадает в глобальную область видимости.

var name = 'Alex'

Это глобальная переменная

Если же мы создадим переменную внутри функции, то она станет локальной переменной функции. Эьл значит, что она будет доступна только внутри функции, а снаружи ее не будет видно.

var name = 'Alex'

function getName () {
  var otherName = 'John'
}

Давайте попробуем вывести переменную name.

var name = 'Alex'

function getName () {
  var otherName = 'John'
}

document.write(name)

Как мы видим, эта переменная вывелась, так как она доступна нам в глобальной области видимости.

Если же мы попробуем вывести переменную otherName, то оно ее не выведет, так как эта переменная доступна только внутри функции

var name = 'Alex'

function getName () {
  var otherName = 'John'
}

document.write(otherName)

Давайте перенесем document.write внутрь функции getName и вызовем эту функцию ниже

var name = 'Alex'

function getName () {
  var otherName = 'John'
  document.write(otherName)
}

getName()

Тепрь у нас в браузер вывелась переменная otherName. Это происходит потому, что document.write теперь имеет доступ к всем локальным переменным внутри функции.

Теперь давайте разберем нюансы. В javascript можно создать переменную не используя слово var

someText = 'text'

И javascript прочитает эту инструкцию абсолютно спокойно. Единственный нюанс в том, что эта переменная будет всегда обьявлена как глобальная. В если случаи когда это очень сильно усложняет понимание кода

Если мы напишем document.write в конце кода и попробуем вывести опять otherName, то у нас ничего не выведет, так как такой переменной нет в глобальной области видимости.

var name = 'Alex'

function getName () {
  var otherName = 'John'
}

getName()
document.write(otherName)

Если же мы уберем var и создадим переменную без него, то переменная станет глобальная и document.write выведет ее нам

var name = 'Alex'

function getName () {
  otherName = 'John'
}

getName()
document.write(otherName)

Никогда в жизни так не пишите. Это абсолютно не однозначно и сразу же усложняет понимание кода. Всегда создавайте все переменные только с var. В этом случае, переменная становится глобальной, хотя возможно мы хотели сделать ее локальной. И в любом другом месте мы можем ее переопределить, даже не подозревая об этом.

И еще один нюанс. Все глобальные переменные существуют, пока у нас загружена страница. Если мы ее перезагрузим, то все сотрется. Локальные же переменные исчезнут, как только функция которую мы вызвали закончит выполнятся. В нашем случае, переменная otherName исчезнет, как только функция getName закончит выполнение.

Если у вас возникли какие-то вопросы или комментарии, пишите их прямо под этим видео.

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
Rustam Apaev
6 лет назад
наверное, логично было бы здесь же рассказать про замыкания.
monsterlessons
6 лет назад
Для этого есть отдельный урок. Данная серия покрывает только базовые знания javascript, к которым отнести замыкания я не могу. https://monsterlessons.com/project/lessons/zamykaniya-v-javascript