- 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);
}
ASD_77 07.07.2021 17:40 # 0
HEu3BECTHblu_nemyx 07.07.2021 17:51 # 0
ASD_77 07.07.2021 18:44 # 0
HEu3BECTHblu_nemyx 07.07.2021 18:57 # 0
ASD_77 07.07.2021 20:34 # 0
JaneBurt 07.07.2021 23:54 # 0
Интересно, а как в твоем JS-подобном языке работают замыкания (или работали бы)? Если они используют ссылки на внешние переменные и их вызвать в тот момент, когда память из под этих самых переменных почистилась, то как поведет себя программа? Будет использовать мусорные данные, упадет (segfault десу)? Либо на этапе компиляции есть escape analysis, после которого решается какие переменные выделить в куче, а какие на стеке (как в Go, ЖС например) либо генерится ошибка компиляции (как в Rust - память под части структуры должна быть занята не на более короткий срок чем под саму структуру)?
MAKAKA 07.07.2021 23:58 # 0
bormand 08.07.2021 00:05 # 0
> escape analysis
MAKAKA 08.07.2021 00:11 # 0
>Если они используют ссылки на внешние переменные и их вызвать в тот момент, когда память из под этих самых переменных почистилась
JaneBurt 08.07.2021 00:18 # 0
MAKAKA 08.07.2021 00:19 # 0
Если же решает программист (как в случае С++) то программист же и решает как и какие переменные захватывает замыкание (по ссылке или копируя по значению)
bormand 08.07.2021 00:34 # 0
ASD_77 08.07.2021 01:11 # 0
bormand 08.07.2021 01:14 # +1
Или это временная подпорка?
ASD_77 08.07.2021 02:03 # 0
bootcamp_dropout 07.07.2021 22:55 # 0
ASD_77 08.07.2021 02:04 # 0
MAKAKA 08.07.2021 02:09 # 0
Number не определён с ключ словом "class"
Number это хуёвая конструкция, которая с "new" создает объект, а без new кастит, как и String, как и прочая херня
MAKAKA 07.07.2021 22:59 # +1
JaneBurt 07.07.2021 23:45 # 0
1) Создает объект;
2) Прокидывает его как this вызываемой функции;
3) Вызывает функцию;
4) Если функция ничего не вернула (или в понятиях ЖС - вернула undefined), то new возвращает указатель на свежесозданный объект, иначе - то что вернула функция;
Значит если вызвать Animal без new, то вернется undefined, потому что идет просто вызов функции, без учета контекста свежесозданного объекта. И на строчке "dog2.move(11)" программа упадет. Ну, если аффтар следовал такой спеке.
bootcamp_dropout 07.07.2021 23:47 # +3
мы вам перезвоним
JaneBurt 08.07.2021 00:11 # +1
AjiTae 20.07.2021 00:03 # +1