JavaScript で文字列から関数を作成するにはどうすればよいですか?

王林
リリース: 2023-08-28 12:49:10
転載
1321 人が閲覧しました

如何在 JavaScript 中从字符串创建函数?

JavaScript で文字列から関数を作成することは、実行時に関数を動的に生成する必要がある場合、または実行したい関数のコードを含む文字列がある場合に役立ちます。

文字列から関数を構築する機能は、実行時に関数を動的に作成できる JavaScript の便利な機能です。 eval() 関数と新しい Function() 関数 Object() [ネイティブ コード] は、これを行う 2 つの最も一般的な方法ですが、どちらにも重大なセキュリティ上の欠陥があります。

Function.prototype.constructor は、あまり知られていませんが、より安全なオプションです。文字列から関数を作成する JavaScript アプローチを選択する前に、リスクと使用例を考慮することが重要です。

方法 1: eval() 関数を使用する

JavaScript eval() メソッドは、文字列から関数を構築する最も簡単な方法の 1 つです。この強力な eval() 関数は、文字列として提供された任意の JavaScript コードを実行できます。 ######例###### ### リーリー

ここでは、2 つのパラメーターを受け取り、その合計を返す関数があることがわかります。この関数は文字列に含まれています。 eval() 関数は、この文字列をパラメータとして受け取り、関数を返す前にそれを評価します。返された関数は、他の関数と同様に使用できる add という名前の変数に割り当てられます。

ただし、指定された JavaScript コードはすべて実行されるため、実稼働コードで使用するとセキュリティ上の欠陥が生じる可能性があり、危険が伴う可能性があります。

方法 2: 新しい Function() コンストラクターを使用する

JavaScript で文字列から関数を作成するもう 1 つの方法は、Function() コンストラクターを使用することです。 Function() コンストラクターは、関数コードを含む文字列から新しい関数オブジェクトを作成します。 Function() コンストラクターを使用して文字列から関数を作成する方法の例を次に示します。 -

Example

リーリー

この例では、関数コードを含む文字列を Function() コンストラクターに渡し、その文字列から新しい関数オブジェクトを作成します。次に、返された関数を変数 add に代入します。この変数は、他の関数と同様に使用できます。

関数の作成のみが可能なため、eval() よりもリスクは低くなりますが、依然として同様のリスクがあります

方法 3: Function.prototype.constructor を使用する

これにより関数が生成されますが、文字列として渡される関数本体以外の他のコードは実行できません。ただし、他の 2 つの方法ほど広く使用されておらず、古いブラウザではサポートされていません。 ######例###### ### リーリー

この例では、関数パラメーターと関数本体がコンストラクターに提供されます。 Function.prototype.constructor を使用して、指定されたパラメーターと指定された関数本体で新しい関数を作成し、指定されたパラメーターで関数を呼び出すことですぐにその関数を呼び出します。

文字列から構築する関数はグローバル スコープにアクセスでき、作成元のコードのスコープには含まれないことに注意してください。

もう 1 つ覚えておくべき重要な点は、文字列から関数を作成すると、特に関数本体が長い場合にアプリケーションの速度が低下する可能性があることです。

さらに、関数が複雑な場合、文字列から関数を構築すると、コードの理解とデバッグがより困難になる可能性があります。

セキュリティの問題のため、実稼働コードで eval() メソッドと new Function() メソッドを使用することは通常推奨されません。代わりに、関数をプリコンパイルしたり、Babel などの JavaScript プリプロセッサを使用してコードを同等のより安全なバージョンに変換したりするなど、他のオプションを検討する必要があります。

以上がJavaScript で文字列から関数を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!