0

関数コードでは、これを行うと:

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でテストしました

4

2 に答える 2

2

単なる仮定:

スクリプトブロックは最初に解析されますが、実行されません(eval)

ブラウザは2行目で構文エラーのみを検出し、完全なスクリプトブロックを実行しなかったため、eval()で構文エラーを判別しません。

2行を2つの異なるscript-elementに入れると、両方のエラーが発生します。

http://jsfiddle.net/doktormolle/CfRmj/

于 2012-09-13T13:34:31.373 に答える
0

「デフォルト」はJavascriptの予約キーワードなので:)

したがって、コードが正しいかどうかがチェックされると、alert(デフォルト)は「構文エラー」をスローしますが、関数evalが実行され、最初のエラーのためにプロセスがここに到達します。

于 2012-09-13T13:28:59.593 に答える