update func
This commit is contained in:
@@ -46,4 +46,50 @@ message = 'Hello';
|
||||
```js
|
||||
typeof null == "object" // ошибка в языке
|
||||
typeof function(){} == "function" // именно для функций
|
||||
```
|
||||
|
||||
## Устаревшее ключевое слово "var"
|
||||
Обычно var не используется в современных скриптах, но всё ещё может скрываться в старых.\
|
||||
|
||||
Существует 2 основных отличия var от let/const:
|
||||
- Переменные var не имеют блочной области видимости, они ограничены, как минимум, телом функции.
|
||||
- Объявления (инициализация) переменных var производится в начале исполнения функции (или скрипта для глобальных переменных).
|
||||
|
||||
### Для «var» не существует блочной области видимости
|
||||
Область видимости переменных `var` ограничивается либо функцией, либо, если переменная глобальная, то скриптом. Такие переменные доступны за пределами блока.
|
||||
|
||||
`var` выходит за пределы блоков `if`, `for` и подобных. Это происходит потому, что на заре развития JavaScript блоки кода не имели лексического окружения.
|
||||
|
||||
### «var» допускает повторное объявление
|
||||
Используя var, можно переобъявлять переменную сколько угодно раз. Повторные var игнорируются.
|
||||
|
||||
### «var» обрабатываются в начале запуска функции
|
||||
Это поведение называется «hoisting» (всплытие, поднятие), потому что все объявления переменных var «всплывают» в самый верх функции.
|
||||
Объявления переменных var обрабатываются в начале выполнения функции (или запуска скрипта, если переменная является глобальной).
|
||||
|
||||
Другими словами, переменные var считаются объявленными с самого начала исполнения функции вне зависимости от того, в каком месте функции реально находятся их объявления (при условии, что они не находятся во вложенной функции).
|
||||
|
||||
***Объявления переменных «всплывают», но присваивания значений – нет.***
|
||||
|
||||
### IIFE
|
||||
В прошлом, поскольку существовал только `var`, а он не имел блочной области видимости, программисты придумали способ её эмулировать. Этот способ получил название «Immediately-invoked function expressions» (сокращенно IIFE).
|
||||
Здесь создаётся и немедленно вызывается Function Expression. Так что код выполняется сразу же и у него есть свои локальные переменные.
|
||||
```js
|
||||
// Способы создания IIFE
|
||||
(function() {
|
||||
var message = "Привет";
|
||||
alert(message); // Привет
|
||||
})(); // Круглые скобки вокруг функции
|
||||
|
||||
(function() {
|
||||
alert("Круглые скобки вокруг всего выражения");
|
||||
}());
|
||||
|
||||
!function() {
|
||||
alert("Выражение начинается с логического оператора НЕ");
|
||||
}();
|
||||
|
||||
+function() {
|
||||
alert("Выражение начинается с унарного плюса");
|
||||
}();
|
||||
```
|
||||
Reference in New Issue
Block a user