この記事では、JavaScript での eval() 関数の使用法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
eval 関数を呼び出すと、そのパラメータは JavaScript プログラムとして解釈できます。つまり、eval はそのパラメーターをコード
として実行できます。
function f(x) { eval('var y=x'); console.log('y:', y); } f('hello');//y:hello
この例では、eval
は string
パラメータ var y=x
を 1 行のコードとして実行します。はい、ローカル変数 y
が関数 f
内で宣言されています。これは基本的に
function f(x) { var y=x; console.log('y:', y); } f('hello');//y:hello
と同じ実行効果です。
eval 関数によるスコープへの干渉を許可するのは、非常に間違ったアプローチです。このアプローチでは、コードの一部が理解しにくくなり、安全でなくなる可能性があります。次の例では、外部呼び出し元にローカル変数を変更し、ローカル スコープを変更する機能を与えます。
例
let g = '全局变量' function f(src) { eval(src); console.log('g:', g); } //以上为源代码 f("var g= '局部变量'");//g:局部变量 f("var y= '局部变量'");//g:全局变量
ソース コードで定義されていない変数 y
を eval
関数に渡す場合、このコードの実行結果は予測不能になります。
eval
関数が外側のスコープに影響を与えないようにする簡単な方法は、ネストされたスコープを使用することです。 ES5 の strict モード
がこれを行います。
例
let g = '全局变量' function f(src) { (()=> eval(src))();//在嵌套作用域中执行eval console.log('g:', g); } //以上为源代码 f("var g= '局部变量'");//g:全局变量 f("var y= '局部变量'");//g:全局变量
関数呼び出しに eval
識別子が含まれる場合、それは直接呼び出しと呼ばれます。現時点では、実行されたプログラム (eval のパラメーター) は呼び出し元のローカル スコープに完全にアクセスできます。
例
const g = '全局变量'; function foo() { const g = '局部变量'; console.log(eval('g'));//直接调用,可以访问到foo的局部作用域,所以输出的是局部变量g } foo(); //局部变量
eval
を別の変数名にバインドします。この変数を介した eval
の呼び出しは、間接呼び出しと呼ばれます。このとき、実行されたプログラム (eval のパラメータ) はローカル スコープにアクセスできなくなります。カンマ演算子 、
を使用すると、間接呼び出しを簡潔に記述することができます。
例
const g = '全局变量'; function foo2() { const g = '局部变量'; cont test = eval; //间接调用,不能访问函数内部的变量g console.log(test('g')); //全局变量 //间接调用简洁方式 console.log((0, eval)('g'));//全局变量 }
プログラミング関連の知識については、プログラミング入門をご覧ください。 !
以上がJavaScript での eval() 関数の使用法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。