Запись внутри 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, время: 11:28. |