JavaScript での eval() 関数の使用法について話しましょう

青灯夜游
リリース: 2021-05-25 10:14:41
転載
2714 人が閲覧しました

この記事では、JavaScript での eval() 関数の使用法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

JavaScript での eval() 関数の使用法について話しましょう

#1. eval 関数の用途は何ですか?

eval 関数を呼び出すと、そのパラメータは JavaScript プログラムとして解釈できます。つまり、eval はそのパラメーターをコード

として実行できます。

function f(x) {
    eval('var y=x');
    console.log('y:', y);
}
f('hello');//y:hello
ログイン後にコピー

この例では、evalstring パラメータ var y=x を 1 行のコードとして実行します。はい、ローカル変数 y が関数 f 内で宣言されています。これは基本的に

function f(x) {
    var y=x;
    console.log('y:', y);
}
f('hello');//y:hello
ログイン後にコピー

と同じ実行効果です。

2. eval 関数を使用したローカル変数の作成を避ける

eval 関数によるスコープへの干渉を許可するのは、非常に間違ったアプローチです。このアプローチでは、コードの一部が理解しにくくなり、安全でなくなる可能性があります。次の例では、外部呼び出し元にローカル変数を変更し、ローカル スコープを変更する機能を与えます。

let g = '全局变量'
function f(src) {
    eval(src);
    console.log('g:', g);
}
//以上为源代码
f("var g= '局部变量'");//g:局部变量
f("var y= '局部变量'");//g:全局变量
ログイン後にコピー

ソース コードで定義されていない変数 yeval 関数に渡す場合、このコードの実行結果は予測不能になります。

eval 関数が外側のスコープに影響を与えないようにする簡単な方法は、ネストされたスコープを使用することです。 ES5 の strict モード がこれを行います。

let g = '全局变量'
function f(src) {
   (()=> eval(src))();//在嵌套作用域中执行eval
    console.log('g:', g);
}
//以上为源代码
f("var g= '局部变量'");//g:全局变量
f("var y= '局部变量'");//g:全局变量
ログイン後にコピー

3. eval 関数の 2 つの呼び出し方法

3.1 直接呼び出し方法:

関数呼び出しに eval 識別子が含まれる場合、それは直接呼び出しと呼ばれます。現時点では、実行されたプログラム (eval のパラメーター) は呼び出し元のローカル スコープに完全にアクセスできます。

const g = '全局变量';
function foo() {
    const g = '局部变量';
    console.log(eval('g'));//直接调用,可以访问到foo的局部作用域,所以输出的是局部变量g
}
foo(); //局部变量
ログイン後にコピー

3.2 間接呼び出しメソッド:

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

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