When any programming language is first designed it is not obvious just what commands will be essential and what will just cause problems. That is because the way the language ends up being used may turn out to be quite different from what those responsible for creating it expected.
With most languages this is resolved by releasing a new version of the language every so often. The bad features are deprecated and new ones to make it easier to do the things that the language is being used for are introduced. Programmers who did use the now deprecated commands now replace them with better code and those commands are then completely dropped from the following version.
Strict mode also does away with the completely unnecessary with statement which made variable references more ambiguous and also often made the code longer than the alternative (despite it being intended to make the code shorter). It simply turned out that there is a more effective, shorter and far less ambiguous way to achieve the same result making that command completely unnecessary so strict mode does away with it.
Strict mode hasn't gone so far as to remove the eval command. While that command to is completely unnecessary there are too many people using it to do away with it completely. Instead the scoping rules that the command running in strict mode has been greatly restricted so that code inside an eval statement cannot interfere with code outside of it. When used in a way that works under the new rules it will work exactly the same in browsers that don't support strict mode and will provide the same restrictions in all browsers provided that the code actually works in browsers that support strict mode.
This article written by Stephen Chapman, Felgall Pty Ltd.