Your observation is pretty correct. eval() does nothing else than to evaluate Javascript code. Therefore the outcome is identical. However, the usage of eval() is pretty frowned upon. That is for security and performance reasons.
For instance, a Javascript engine (at least most of them) always trys to optimize your code in terms of access performance. Without going to deep here, accessing a pretty deep scope chain property is costly, so engines will optimize that access with hash lookup tables. By invoking eval() this mechanism can no longer be used and therefore, it's slower to lookup the property.
That is only one example why the usage of eval() is not recommendable, there are plenty more.