このようなコードを使用して、グローバルコンテキストで eval() 関数を呼び出しました。
eval( (new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile("/BaseScripts/sft.js", 1).ReadAll(), );
その後、「sft.js」スクリプト ファイル内のすべてのローカル変数、関数、オブジェクトがグローバル コンテキストに追加されます。しかし、ローカル関数で行う eval の同じ呼び出しの場合:
function run_eval(path) {
eval( (new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile(path, 1).ReadAll(), );
}
run_eval("/BaseScripts/sft.js");
「sft.js」スクリプト ファイル内のローカル変数、関数、オブジェクトは、グローバル コンテキストに追加されません。なんで ?ドキュメントによると、両方の呼び出しはグローバルオブジェクトに対して確立されています。なぜ最初の呼び出しだけが "sft.js" スクリプト ファイルからグローバル オブジェクトに変数を追加するのですか? 状況を保存せずrun_eval()
、グローバル コンテキストで明示的に呼び出します。
run_eval.call(this, "/BaseScripts/sft.js");
//or
run_eval.call(RuntimeObject(), "/BaseScripts/sft.js");
両方の呼び出しは結果によって等しいrun_eval("/BaseScripts/sft.js");
です。コメントは歓迎ですか?