Почему строка типа "{opacity: 1.0, width: '132px'}"
не может быть оценена с помощью eval () как есть?
Поскольку текст возникает там, где ожидается оператор или блок, а не выражение, ипоэтому {
обозначает начало блока , а не начало инициализатора объекта .(И тогда opacity:
интерпретируется как метка , за которой следует разделитель операторов [запятая], а затем width:
выглядит как другая метка, которая там недопустима.)
Помещение в круглые скобки изменяет контекст синтаксического анализа, так что ожидается выражение, и поэтому {
открывает инициализатор.(Это та же самая причина, по которой вы видите самозаполняющиеся анонимные функции, заключенные в скобки, например (function(){ ... })();
, а не просто function(){ ... }();
.)