Ответ 1
$eval
и $parse
не оценивать JavaScript; они оценивают выражения AngularJS . Связанная документация объясняет различия между выражениями и JavaScript.
В: Что именно делает $eval? Зачем нужен собственный мини-парсинг?
Из документов:
Выражения - это фрагменты кода, подобные JavaScript, которые обычно помещаются в привязки, такие как {{expression}}. Выражения обрабатываются с помощью службы $parse.
Это мини-язык, подобный JavaScript, который ограничивает то, что вы можете запустить (например, никаких операторов потока управления, кроме трехмерного оператора), а также добавляет некоторую добротность (например, фильтры).
В: Почему не используется простой старый javascript "eval"?
Потому что он фактически не оценивает JavaScript. Как говорят документы:
Если... вы хотите запустить произвольный код JavaScript, вы должны сделать его методом контроллера и вызвать метод. Если вы хотите eval() выражение angular из JavaScript, используйте метод $eval().
Документы, связанные с этим, содержат намного больше информации.