関数コードでは、これを行うと:
eval( 'var default = 100;' );
alert( default );
ブラウザのJSエンジン*は、最初のステートメントが正常に実行されたかのように、 2番目のステートメントで構文エラーをスローします。
ここを参照してください:http: //jsfiddle.net/4FMdy/(ブラウザのコンソールを開いてエラーログを表示します)
ただし、コードから2番目のステートメントを削除すると、次のようになります。
eval( 'var default = 100;' );
ブラウザのJSエンジンは、そのステートメントで構文エラーをスローします。
ここを参照してください:http: //jsfiddle.net/4FMdy/1/
わかりません。最初のステートメントが構文エラーをスローする場合(当然のことながら)、上記の最初の例で2番目のステートメントのみがそのようなエラーをスローするのはなぜですか。私が理解していることから、ステートメントがエラーをスローした場合、それは必然的に(同じ呼び出しの)以前のすべてのステートメントが正常に実行されたことを意味します。
ところで、JavaScriptでは予約語であるため構文エラーがスローdefault
されるため、変数名として使用することはできません。
また、「evalisevil」のコメントはご遠慮ください。ブラウザのJSエンジンの動作を理解しようとしています。
*FirefoxとChromeでテストしました