JavaScript функции. Часть 4

Воскресенье, 06 Ноябрь 2016 16:41

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

Давайте начнем с простейшего кода, в котором опишем некую функцию. Функция эта будет присваивать некое значение переменной и возвращать эту самую переменную. Ну и попробуем вызвать эту функцию, чтобы получить доступ к переменной:

1.function test(){
2.var a = 'Значение переменной';
3.return a;
4.}
5.test();
6.alert(a);
 

Если сейчас запустить данный код, то мы не увидим ожидаемый результат. Никакого модального окна alert нет? Если нет модального окна, тогда логично предположить, что в коде есть ошибка. Ну что же, давайте откроем консоль браузера и проверим, есть ли ошибка.

Точно, ошибка есть. Текст ошибки сообщает нам, что мы обращаемся к неопределенной переменной a… Как же так? — спросите вы, — Ведь мы объявили эту переменную в функции и вызвали функцию.

Вот здесь мы и затронем вопрос области видимости. Итак, область видимости внутри функции является локальной, вне функции — глобальной. Соответственно, все переменные, объявленные внутри функции, будут локальными, вне функции — глобальными.

Локальная область видимости и локальные переменные, созданные в этой области видимости, видны и доступны только в этой области видимости. Проще говоря, переменные, созданные внутри функции, доступны только самой функции и вне функции мы не можем к ним обращаться.

В то же время, глобальные переменные доступны как вне функции, так и внутри нее. Давайте попробуем объявить переменную вне функции, а затем использовать ее внутри функции.

1.var a = 10;
2.function test(){
3.a += 5; // увеличиваем значение переменной
4.return a;
5.}
6.console.log('Значение перменной до вызова функции: ' + a);
7.test();
8.console.log('Значение перменной после вызова функции: ' + a);
 

Здесь вместо команды alert мы использовали команду console.log, которая гораздо более удобна в отладке кода. Как вы уже, наверное, догадались, console.log выводит что-либо в консоль. В данном случае мы вывели в консоль значение переменной до вызова функции и после. Заглянем в консоль:

Как видим, функции видна глобальная переменная и функция может без проблем изменить значение такой переменной. не забывайте об этом, чтобы случайно не изменить значение глобальной переменной. Если вам не нужно работать внутри функции с глобальной переменной, тогда всегда объявляйте внутри функции переменную через var, тем самым мы делаем переменную локальной, т.е. принадлежащей исключительно функции. И пример, поясняющий слова выше:

1.var a = 10; // глобальная переменная
2.function test(){
3.var a = 15; // локальная переменная
4.console.log('Значение локальной перменной функции: ' + a);
5.}
6.console.log('Значение перменной до вызова функции: ' + a);
7.test();
8.console.log('Значение перменной после вызова функции: ' + a);
 

Как видим, и вне функции, и внутри функции используется переменная с одинаковым именем. Однако, эти переменные не пересекаются, поскольку внутри функции с помощью var мы объявили локальную переменную, которая никак не влияет на глобальную. Ну а в глобальной области видимости наша переменная не изменилась ни до, ни после вызова функции.

 

Источник: http://webformyself.com/javascript-funkcii-chast-4/