Найти в Дзене

Особенности функций JavaScript

JavaScript довольно таки сильно отличается от “классических” языков программирования (может поэтому он и вышел на первое место в 2024 году). Это даёт как преимущества, так и побочные эффекты. Об одном из таких эффектов сегодня расскажу. Функции в JavaScript можно вызывать где угодно. Хоть до определения, хоть после. Вроде как это удобно, потому что не надо заморачиваться с местом в коде, где эти функции будут определены. Например, вы можете все функции определить в самом конце сценария, и при этом вам не придётся применять прототип функции, как в С++. Однако есть нюансы… В этом примере, казалось бы, строка alert(F); должна отобразить исходный код функции F(), однако на экране мы увидим число 0. Потому что при объявлении переменной F мы переписали содержимое свойства F глобального объекта. И да - после объявления переменной F функции F() больше не существует (мы её перезаписали), и попытка её вызвать приведёт к ошибке. Но почему же первый раз функция выполняется правильно? Да потому что

JavaScript довольно таки сильно отличается от “классических” языков программирования (может поэтому он и вышел на первое место в 2024 году). Это даёт как преимущества, так и побочные эффекты. Об одном из таких эффектов сегодня расскажу.

Функции в JavaScript можно вызывать где угодно. Хоть до определения, хоть после. Вроде как это удобно, потому что не надо заморачиваться с местом в коде, где эти функции будут определены. Например, вы можете все функции определить в самом конце сценария, и при этом вам не придётся применять прототип функции, как в С++.

Однако есть нюансы…

В этом примере, казалось бы, строка alert(F); должна отобразить исходный код функции F(), однако на экране мы увидим число 0. Потому что при объявлении переменной F мы переписали содержимое свойства F глобального объекта. И да - после объявления переменной F функции F() больше не существует (мы её перезаписали), и попытка её вызвать приведёт к ошибке.

Но почему же первый раз функция выполняется правильно? Да потому что мы вызываем её до того, как объявляем переменную (до того, как перезаписываем свойство F).

Такие неприятности в принципе невозможны в таких языках, как С/С++ или Паскаль (Delphi, Lazarus). Потому что там не может быть идентификаторов с одинаковыми именами. Да, функции могут быть перегружены. Но это другое…

Так что возможность такая в JavaScript есть. Но надо ли ей пользоваться - это вопрос. Я вот точно никогда не буду )))

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.