Lightning Locker による eval() 関数の制限
Lightning Locker では、コードを動的に評価するサードパーティライブラリを使用できるように eval()
関数の使用がサポートされます。ただし、これは名前空間のグローバル範囲でのみ適用されるように制限されます。eval()
関数は、コールされた範囲内のローカル変数にアクセスできません。
通常、eval()
には 2 つの実行モードがあります。eval()
を直接呼び出すと、ローカル範囲で機能します。参照経由で呼び出すと、グローバル範囲で機能します。Lightning Locker は後者のみをサポートします。
たとえば、次のコードを実行するとします。
bar()
をコールすると、評価がローカル範囲で実行された場合は 2 が返され、グローバル範囲で実行された場合は 1 が返されます。ローカル範囲から変数を使用する必要がある場合は、コードをリファクタリングします。Function()
を使用し、ローカル変数をパラメータとして宣言し、それを引数として渡し、return ステートメントを追加します。
Lightning Web Security では、コードがサンドボックスで実行されるため eval()
がグローバル範囲に制限されません。ただし、ローカル範囲で eval()
を直接起動することは、やはりお勧めできません。