1

breakcontinue、およびreturn関数が組み込まれていることを知っています。

しかし、私はhttp://summerofgoto.com/が書き込みを許可しているのを見ましたgoto <label>

このように関数を呼び出せるようにするには、何を書けばよいのでしょうか?

注意:エラーが発生します:Missing ; before statement私が書いた場合foo bar;

4

4 に答える 4

2

それはいけません。「Summerofgoto」/「goto.js」は、厄介なハックを使用してこのステートメントを有効にしています。JS ソース コードを 1 行ずつ解析し、正規表現を使用して「goto xy;」などのパターンを見つけます。

基本的に、「goto.js」は、実際のコード (ラベルと goto を含む) を通常の JS に書き換える JavaScript のプリプロセッサです。ラベルと goto ステートメントを関数と関数呼び出しに置き換えます。

ただし、同じことを行うことができます。ただし、パフォーマンス上の理由から、そうしないことを強くお勧めします。

「break」などは関数ではなく、コア言語の一部であるステートメントです。それはまったく別のことです。

于 2012-06-29T15:42:20.563 に答える
1

goto.jsステルスです。スクリプトを実際にJavascriptとして実行する代わりに、ドキュメントの<script type="text/jsplusgoto">( !ではなく text/javascript)を読み取り、ラベルとgotoを実際のJavascriptに書き換えます。

あなたが何をしようとしても、そのテクニックはほぼ間違いなくやり過ぎです。

于 2012-06-29T15:41:40.747 に答える
1

These are keywords of the language, not functions. When one wants to extend a language with new keywords, the code containing such keywords generally has to be parsed and every occurrence of every new keyword replaced with a function call or other suitable construction available in the original language.

于 2012-06-29T15:42:08.057 に答える
0

breakcontinue、およびreturn関数が組み込まれていることを知っています。

breakcontinue、およびreturnは関数ではありません。一般に、gotoは有害であると見なされbreak、 、continue、およびreturn関数の途中にあるものは goto です。

于 2012-06-29T15:43:48.593 に答える