distinguishing eval()and new function()in javascript
in javascriptでは、開発者はしばしば同様のタスクを実行するように見える2つの機能に遭遇します:eval()とnew function()。両方の関数は文字列をコードとして評価しますが、その根本的なメカニズムと意味は大きく異なります。これは、現在の範囲で定義されたローカル変数にアクセスできることを意味します。対照的に、新しい関数()は、文字列に保存されているJavaScriptコードを関数オブジェクトに解析し、それを呼び出すことができます。この関数オブジェクトは別のスコープで作成されるため、呼び出し環境のローカル変数にアクセスできません。 return eval( '(' string ')'); } var func = function(string){ return(new function( 'return(' string ')')()); } console.log(evaluate( '2 1')); console.log(func( '2 1'));両方の関数は3の期待される結果を出力します。ただし、コードを変更してローカル変数を利用すると、違いが明らかになります:
関数Test1(){ var a = 11; eval( '(a = 22)'); //「test1」関数内のローカル変数を変更します アラート(a); //アラート22 }
この場合、eval()を使用すると、評価はtest1関数の範囲内で発生するため、ローカル変数Aが変更されます。ただし、新しい関数( 'return(a = 22);')()を使用した場合、代わりに、コードが別の範囲で実行されるため、ローカル変数Aは影響を受けません。悪意のある入力は、機密情報を潜在的に公開したり、任意のコードを実行したりする可能性があります。したがって、絶対に必要でない限り、これらの関数を使用することを避けることを強くお勧めします。 eval()は、現在の実行スコープ内で文字列を評価し、new function()は評価の新しい範囲を作成します。この区別を理解することは、効果的なJavaScriptプログラミングとセキュリティの維持に不可欠です。免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3