Resht: наглядно, почему работает по-разному с разными уровнями оптимизации: https://godbolt.org/g/YsouJQ - без оптимизаций https://godbolt.org/g/l8tpT5 - -O2
В целом оптимизации часто основываются на undefined behaviour, поэтому в таких случая программа и может работать по-разному при разных уровнях оптимизации компилятора.
rtfm mftr: если без es2015 то смотрите мой комментарий под соседним постом. Внутри конструктора прототип присваивать конструктору - это бред. Но вообще, в 2к17 писать без es2015 - тоже бред. И браузеры уже поддерживают, и нода. Для старых браузеров есть Babel.
rtfm mftr: потому что его там нет. Интерпретатор конечно же не пропускает присваивание прототипа внутри конструктора. Не знаю где Вы вообще увидели такой пример (с присваиванием внутри конструктора Human), если это из учебника то лучше выбросьте этот учебник, так никто не делает.
Я понимаю, что ответ старый, но всё-таки.
Лиспы не более пригодны для ИИ, чем любые другие языки, хватит людей вводить в заблуждение. Этот стереотип про лисп и ИИ возник потому что создатель лиспа занимался ещё и ИИ.
Saboteur lisp не более функциональный, чем js, просто в нём раньше появились функциональные концепции, поэтому по инерции его считают функциональным языком. Вот какой-нибудь haskell — другое дело, но многие концепции из ФП (от лямбд и фвп до функторов и монад) применимы и в js.
HoHsi: так иммутабельность ≠ передача по значению. Просто надо передавать ссылку на объект, который нельзя менять. И да, всё-таки неверно говорить, что ФП = иммутабельность. Иммутабельность — один из принципов ФП, но не единственный. А на счёт лиспов — дело в том, что когда они появились, они действительно были "функциональнее" остальных языков, но со временем функциональные фишки, появившиеся в лиспах, перекочевали в мейнстрим (JavaScript, Python, Ruby, C#, даже C++), так что теперь в лиспах особо и не осталось ничего, что делало бы их функциональнее того же JS. Ну и лиспы уж точно не чисто функциональные, в отличие от Haskell или Idris. Потому что "чистое" ФП подразумевает полное отсутствие изменяемого состояния (переменные в лиспах изменяемы) и работы с IO "напрямую" (в Haskell, например, IO представлено, грубо говоря, в виде структуры содержащей объект ReadWorld, так что с точки зрения формальной семантики языка функции, работающие с вводом-выводом, являются чистыми).
Даниил Демидко: сути не меняет, но стандартам оформления не соответствует. У себя в проекте ты можешь писать как хочешь, но когда приводишь код на сайтах вроде Toster/StackOverflow, лучше приводить код, соответствующий стандартам оформления, принятым в языке, я считаю.
https://godbolt.org/g/YsouJQ - без оптимизаций
https://godbolt.org/g/l8tpT5 -
-O2
В целом оптимизации часто основываются на undefined behaviour, поэтому в таких случая программа и может работать по-разному при разных уровнях оптимизации компилятора.