ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript グローバル関数 eval の定義、使用法、副作用を例とともに詳しく説明

JavaScript グローバル関数 eval の定義、使用法、副作用を例とともに詳しく説明

伊谢尔伦
伊谢尔伦オリジナル
2017-07-25 14:00:182650ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。