break
、continue
、およびreturn
関数が組み込まれていることを知っています。
しかし、私はhttp://summerofgoto.com/が書き込みを許可しているのを見ましたgoto <label>
。
このように関数を呼び出せるようにするには、何を書けばよいのでしょうか?
注意:エラーが発生します:Missing ; before statement
私が書いた場合foo bar;
break
、continue
、およびreturn
関数が組み込まれていることを知っています。
しかし、私はhttp://summerofgoto.com/が書き込みを許可しているのを見ましたgoto <label>
。
このように関数を呼び出せるようにするには、何を書けばよいのでしょうか?
注意:エラーが発生します:Missing ; before statement
私が書いた場合foo bar;
それはいけません。「Summerofgoto」/「goto.js」は、厄介なハックを使用してこのステートメントを有効にしています。JS ソース コードを 1 行ずつ解析し、正規表現を使用して「goto xy;」などのパターンを見つけます。
基本的に、「goto.js」は、実際のコード (ラベルと goto を含む) を通常の JS に書き換える JavaScript のプリプロセッサです。ラベルと goto ステートメントを関数と関数呼び出しに置き換えます。
ただし、同じことを行うことができます。ただし、パフォーマンス上の理由から、そうしないことを強くお勧めします。
「break」などは関数ではなく、コア言語の一部であるステートメントです。それはまったく別のことです。
goto.js
ステルスです。スクリプトを実際にJavascriptとして実行する代わりに、ドキュメントの<script type="text/jsplusgoto">
( !ではなく text/javascript
)を読み取り、ラベルとgotoを実際のJavascriptに書き換えます。
あなたが何をしようとしても、そのテクニックはほぼ間違いなくやり過ぎです。
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.
break
、continue
、およびreturn
関数が組み込まれていることを知っています。
break
、continue
、およびreturn
は関数ではありません。一般に、goto
は有害であると見なされbreak
、 、continue
、およびreturn
関数の途中にあるものは goto です。