eval() はグローバル関数です。JavaScript は eval() を使用して、JavaScript ソース コードで構成される文字列を解釈して実行します。
var result = eval('3+2'); console.log(result,typeof result);//5 'number'
Usage
パラメーターは文字列ではありません。パラメータを直接指定します。パラメータが文字列の場合、文字列は JavaScript コードとしてコンパイルされます。コンパイルが失敗すると、syntaxError 例外がスローされます。コンパイルが成功すると、このコードの実行が開始され、文字列内の最後の式またはステートメントの値が返されます。最後の式またはステートメントに値がない場合は、最終的に unknown が返されます。文字列が例外をスローした場合、例外は呼び出しを eval() に渡します。
var num = 1; var str = 'test'; console.log(eval(num));//1 console.log(eval(str));//ReferenceError: test is not defined var strLong1 = 'var x = 1;var y = 2;'; console.log(eval(strLong1),x,y);//undefined 1 2 var strLong2 = 'var x = 1; x++;'; console.log(eval(strLong2),x);//1 2
スコープ
eval() は、呼び出される変数スコープ環境を使用します。つまり、変数の値を検索し、ローカル スコープ内のコードとまったく同じように新しい変数と関数を定義します
var b = 2; function foo(str,a){ eval(str); console.log(a,b); } foo('var b = 3;',1);//1 3
Alias
エイリアス経由で呼び出された場合、eval() はその文字列はトップレベルのグローバル コードとして実行されます。実行されたコードは、新しいグローバル変数やグローバル関数を定義したり、グローバル変数に値を代入したりすることはできますが、関数内でローカル変数を使用したり変更したりすることはできません
var geval = eval; var x = 'global',y = 'global'; function f(){ var x = 'local'; eval('x += "changed";'); return x; } function g(){ var y = 'local'; geval('y += "changed";'); return y; } console.log(f(),x);//localchanged global console.log(g(),y);//local globalchanged
【注意】IE8 - ブラウザは eval( を介して呼び出しますan alias ) は eval() への通常の呼び出しと同じ結果になります
副作用
JavaScript インタープリターは多くのコード分析と最適化を行いました。 eval() の問題は、動的実行に使用されるコードは通常分析できないため、インタプリタがコードを最適化できず、パフォーマンスの低下につながることです
eval() と同様に、 setTimeout()、setInterval() 、 new Function() など。これらの関数は文字列をパラメーターとして受け取り、プログラムの実行中に動的に実行できます。この実行メカニズムの利点ではパフォーマンスの低下を相殺することはできないため、
strict モードの使用を避けるようにしてください
eval() 関数は強力すぎるため、strict モードはそれに厳しい制限を課します
【1】eval()関数で変数や関数を作成することはできませんが、値の問い合わせや変更は可能です
'use strict'; eval('var x = 1;'); console.log(x);//ReferenceError: x is not defined 'use strict'; var x = 1; eval('x = 2;'); console.log(x);//2
【2】識別子としてのevalの使用は禁止されています
以上がJavaScript グローバル関数 eval の定義、使用法、副作用を例とともに詳しく説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。