- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
class Animal {
move(distanceInMeters = 0) {
print(`Animal moved ${distanceInMeters}m.`);
}
}
function main() {
const dog = new Animal();
dog.move(10);
const dog2 = Animal();
dog2.move(11);
}
Интересно, а как в твоем JS-подобном языке работают замыкания (или работали бы)? Если они используют ссылки на внешние переменные и их вызвать в тот момент, когда память из под этих самых переменных почистилась, то как поведет себя программа? Будет использовать мусорные данные, упадет (segfault десу)? Либо на этапе компиляции есть escape analysis, после которого решается какие переменные выделить в куче, а какие на стеке (как в Go, ЖС например) либо генерится ошибка компиляции (как в Rust - память под части структуры должна быть занята не на более короткий срок чем под саму структуру)?
> escape analysis
>Если они используют ссылки на внешние переменные и их вызвать в тот момент, когда память из под этих самых переменных почистилась
Если же решает программист (как в случае С++) то программист же и решает как и какие переменные захватывает замыкание (по ссылке или копируя по значению)
Или это временная подпорка?
Number не определён с ключ словом "class"
Number это хуёвая конструкция, которая с "new" создает объект, а без new кастит, как и String, как и прочая херня
1) Создает объект;
2) Прокидывает его как this вызываемой функции;
3) Вызывает функцию;
4) Если функция ничего не вернула (или в понятиях ЖС - вернула undefined), то new возвращает указатель на свежесозданный объект, иначе - то что вернула функция;
Значит если вызвать Animal без new, то вернется undefined, потому что идет просто вызов функции, без учета контекста свежесозданного объекта. И на строчке "dog2.move(11)" программа упадет. Ну, если аффтар следовал такой спеке.
мы вам перезвоним