Pull to refresh

Comments 11

В чём практическая ценность этой статьи?
Показать, что как выглядит в отладчике? А не проще просто открыть отладчик и увидеть?

Конечно проще. Если знать на что смотреть. А в чём практическая ценность вашего вопроса?

Если знать на что смотреть.

А это не очевидно что ли? Если не разворачивается — значит примитив. Если разворачивается — значит объект, причём у него и конструктор подписан.
Для того, кто знает JavaScript — представление переменных в отладчике не окажется чем-то новым даже отладчик открыт первый раз. Там всё нарисовано так же, как оно доступно из кода.


А в чём практическая ценность вашего вопроса?

Очевидно, в том, чтобы получить на него ответ. О чём Вы хотели написать-то?

Вот видите, вы выделяете всего 2 сущности в исходном коде — объект и примитив (причём Symbol, являясь примитивом, в отладчике IDEA имеет признак разворачиваемого), а я выделяю 8 сущностей. Плюс, у анонимных классов конструктор не подписан, а модули, хоть и разворачиваются, конструкторов не имеют в принципе. И если бы вы читали не только заголовок, но и резюме, то там я специально для Вас написал:


Не знаю, увидели ли вы что-либо новое для себя в этой статье (если нет, то надеюсь, вы хотя бы не читали её внимательно, надеясь найти что-то новое), зато я обнаружил для себя много чего незнакомого, пока её писал. Что уже хорошо, пусть и не в масштабах Вселенной.
имеет признак разворачиваемого

Но не разворачивается же.


а я выделяю 8 сущностей

Которые различаются тем, что у них внутри. Либо не различаются.
Моя классификация — двухуровневая.


у анонимных классов конструктор не подписан

Специально проверил. Если развернуть, то у прототипа есть свойство constructor, как у всех.
Вообще не вижу причины как-то особо выделять классы — под капотом те же конструктор и прототип.


Не знаю, увидели ли вы что-либо новое для себя в этой статье

Даже человек, для которого новая вся статья, узнал бы то же самое и без неё, просто открыв отладчик и 20 минут с ним поигравшись.

Развивайте дальше вашу мысль. Что вы хотите донести своими комментами? Мне уже даже интересно.

Я по-прежнему пытаюсь понять генеральную мысль статьи.
Не могу поверить, что Вы просто описали то, что легко увидеть и без Вас. Очевидно, у Вас была цель сказать читателю что-то неочевидное. А я почему-то в упор ничего такого не вижу. Может, не туда смотрю?

Очевидно, что человек, различающий всего два цвета, не сможет понять описание радуги, сделанное человеком, различающим 7 цветов (в нашем случае — 8). Попробую объяснить.


Если не разворачивается — значит примитив. Если разворачивается — значит объект, причём у него и конструктор подписан.

Вот здесь sub — это примитив или объект?
image


Если примитив, то почему разворачивается, если объект, то где у него конструктор?

Понятно, что человек, видевший только газон, не может себе представить дерево. Вы не задумывались, что классификация бывает не только одноуровневая?


Вот здесь sub — это примитив или объект?

Это самостоятельная сущность. Тут я ошибся.

Похоже, что в моей классификации типов сущностей исходного кода пропущено замыкание (closure). Я ошибочно относил замыкание к областям видимости (scopes), но, переспав с этой мыслью, я всё-таки вынес замыкание в отдельный тип.


{
    function outer() {
        let nameOut = 'outer';
        return function middle() {
            let nameMid = 'middle';
            return function inner() {
                let nameIn = 'inner';
                debugger;   // breakpoint 2
                return `${nameOut}/${nameMid}/${nameIn}`;
            };
        };
    }

    const func = outer()();
    debugger;   // breakpoint 1
    func();
}

В первой точке останова у нас, путём запуска "outer()()" определена функция "func", что приводит к созданию двух замыканий:



Я вынес замыкания в отдельный тип, т.к. они создаются в момент определения функции, а не в момент её запуска. В момент запуска замыкания превращаются в области видимости (вторая точка останова):



В общем, т.к. в отладчике "замыкания" и "области видимости" показываются по-разному (и искать их при отладке нужно в разных местах), я также их различаю. Таким образом в моей классификации на данный момент 9 типов сущностей, которые можно обнаружить в исходном коде. Из них 8 видны через отладчик (пакеты в nodejs видны как модули, а в браузере вообще отсутствуют).

пакеты в nodejs видны как модули

cjs — как объекты. Можно даже получить конструктор и вызвать его с new

Sign up to leave a comment.

Articles