Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с замыканиями (https://javascript.ru/forum/misc/71610-problema-s-zamykaniyami.html)

ArtyomZaitsev 30.11.2017 22:00

Проблема с замыканиями
 
Почему когда пытаюсь выполнить данный код у меня пишет, что buffer.clear is not a function? Это ведь функция:( Собственно и выдает ошибку в 21 строке.
function makeBuffer() {
        var str = '';
        return function buffer(arg) {
            if (arguments.length == 0) {
                return str;
            }
            else {
                str += arguments[0]
            };
        };
        buffer.clear = function() {
            str = "";
        };
            return buffer;
    };
    var buffer = makeBuffer();
    buffer(0);
    buffer(1);
    buffer(0);
    alert( buffer() );
    buffer.clear();
    alert( buffer() );

ArtyomZaitsev 30.11.2017 22:27

Решилось, return стоял в начале

ArtyomZaitsev 30.11.2017 22:37

Но кто-то может объяснить почему такое обращение к функции? Точнее почему мы называем функцию buffer.clear() внутри другой функции таким образом? или buffer.clear указывает на то, что она по сути находится внутри функции buffer(3 строка)? То есть это уже двойное вложение? если можно так сказать?
В 21 строке мы обращаемся к переменной в которую записана общая функция или непосредственно к самой функции(строка 11). Если мы через переменную обращаемся ко внутренней функции, то не должно ли быть что-то в роде buffer.buffer.clear?


Часовой пояс GMT +3, время: 10:08.