Запись внутри console.log()
Добрый день!
Помогите пожалуйста разобраться. Есть вот такой код по теме "замыкания". "use strict" function makeCounter() { let currentCount = 1; return function () { return currentCount++; }; } let counter = makeCounter(); console.log(counter()); В последней строке в console.log() записана counter() - имя переменной со скобками!!! Функции counter() в коде нет. Counter - это имя объявленной переменной. Почему к ней приписали скобки? Что это за форма записи и где это описано? И это работает. Я подозреваю, что вызвали call-back функцию которая внутри. Она без имени... Большое спасибо! |
В js в переменную можно засунуть что угодно, в том числе и функцию. Что и происходит.
Говоря шире, в js есть на самом деле только одна сущность - объект, всё остальное производные, подведение которых может быть дополнено, но это не делает их отдельными сущностями. |
Цитата:
Вопрос в том, почему эта загадочная запись console.log(counter()), а именно counter() вызвала внутреннюю функцию? |
Цитата:
Цитата:
чтобы убедится посмотрите console.log(counter); без скобок () и этот результат это функция, а скобки ее запускают |
может так вам проще понять будет.
var counter = (function(){
var count = 1;
return ()=>count++;
}());
console.log(counter());
|
function makeCounter() {
let currentCount = 1;
return function () {
return currentCount++;
};
}
тоже самое что
function makeCounter() {
let currentCount = 1;
function новаяФункцияСозданаяПриВызове_makeCounter() {
return currentCount++;
};
return новаяФункцияСозданаяПриВызове_makeCounter
}
просто без лишних телодвижений.Всё просто же:
function makeCounter() {
let currentCount = 1;
function новаяФункцияСозданаяПриВызове_makeCounter() {
return currentCount++;
};
return новаяФункцияСозданаяПриВызове_makeCounter
}
let counter = makeCounter(); // counter = новаяФункцияСозданаяПриВызове_makeCounter
console.log(counter()); // console.log(новаяФункцияСозданаяПриВызове_makeCounter())
Функция, как и говорилось выше, в js ничем в сути своей не отличается от любого иного объекта. Её можно присвоить, вернуть из другой функции, создать и исполнить на ходу и.т.д. Ей даже можно присвоить собственные методы и свойства.) |
Загугли функция как объект первого типа. И почитай про назначение и применение такого поведения это довольно мощный иструмент корорый позволяет гибко манипулировать программой ну или скриптом в реальном времени.
|
лучше "функция объект первого класса"
|
| Часовой пояс GMT +3, время: 05:07. |