在JavaScript内部独立运行JavaScript代码?

在JavaScript内部独立运行JavaScript代码?,javascript,Javascript,浏览器中的JavaScript中是否有一种方法可以运行另一个作为字符串存储的脚本,该脚本独立于主JavaScript,并以一种不(仅)打印到控制台的方式从该脚本获取控制台输出 基本上我想要这样的东西: var script = 'console.log("Hello World");' var consoleOut = script.runAsJS(); var script = 'console.log("Hello World");' var co

浏览器中的JavaScript中是否有一种方法可以运行另一个作为字符串存储的脚本,该脚本独立于主JavaScript,并以一种不(仅)打印到控制台的方式从该脚本获取控制台输出

基本上我想要这样的东西:

var script = 'console.log("Hello World");'

var consoleOut = script.runAsJS();
var script = 'console.log("Hello World");'
var consoleOut = [];
script = script.replace(/console\.log/g,"consoleOut.push");
eval(script);

也许你可以调查一下

希望这就是您所说的“独立于主javascript”的意思。如果在字符串中不定义外部作用域中的变量,eval()将不适用于您。它被视为同一程序的一部分

编辑:另请参见关于指定eval()的范围

如果要将console.log存储在变量中,请尝试以下操作:

var script = 'console.log("Hello World");'

var consoleOut = script.runAsJS();
var script = 'console.log("Hello World");'
var consoleOut = [];
script = script.replace(/console\.log/g,"consoleOut.push");
eval(script);
编辑:正如评论所建议的,eval在安全性方面通常不是最好的。一个更有效、更安全的选择可能是,但是文档提到,
功能
仍然存在安全问题:

var script = 'console.log("Hello World");'
var consoleOut = [];
scriptFunction = new Function(script.replace(/console\.log/g,"consoleOut.push"));
scriptFunction();


也许你可以调查一下

希望这就是您所说的“独立于主javascript”的意思。如果在字符串中不定义外部作用域中的变量,eval()将不适用于您。它被视为同一程序的一部分

编辑:另请参见关于指定eval()的范围

如果要将console.log存储在变量中,请尝试以下操作:

var script = 'console.log("Hello World");'

var consoleOut = script.runAsJS();
var script = 'console.log("Hello World");'
var consoleOut = [];
script = script.replace(/console\.log/g,"consoleOut.push");
eval(script);
编辑:正如评论所建议的,eval在安全性方面通常不是最好的。一个更有效、更安全的选择可能是,但是文档提到,
功能
仍然存在安全问题:

var script = 'console.log("Hello World");'
var consoleOut = [];
scriptFunction = new Function(script.replace(/console\.log/g,"consoleOut.push"));
scriptFunction();

什么环境

在浏览器中,可以使用

在Node/Deno中,您可以使用或分离进程。

什么环境

在浏览器中,可以使用

在Node/Deno中,您可以使用或分离进程。

运行另一个存储为字符串的脚本,您可以将其用作。脚本独立于您可以使用的主JavaScript运行

因此,结合
eval
IIFE
可以得到您想要的结果。像
(function(){eval(script)})()

下面是一个小片段,可能会更详细

//全局范围中的变量。
设a=10;
函数runAsJS(脚本){
(功能(){
评估(脚本)
})();
}
让脚本=`
设a=10;
a+=10;
log('a from eval script',a);`;
runAsJS(脚本);
console.log('a来自全局范围',a)以运行另一个存储为字符串的脚本,您可以将其用作。脚本独立于您可以使用的主JavaScript运行

因此,结合
eval
IIFE
可以得到您想要的结果。像
(function(){eval(script)})()

下面是一个小片段,可能会更详细

//全局范围中的变量。
设a=10;
函数runAsJS(脚本){
(功能(){
评估(脚本)
})();
}
让脚本=`
设a=10;
a+=10;
log('a from eval script',a);`;
runAsJS(脚本);


console.log('a来自全局范围',a)这是否回答了您的问题?可能是@JayVaghasiya的复制品,但没有控制台outputs@Karan它已经发布为答案,它不是独立的,也没有给控制台这是你要找的吗?这回答了你的问题吗?可能是@JayVaghasiya的复制品,但没有控制台outputs@Karan它已经发布为答案,它不是独立的,也没有给控制台这是你要找的吗?谢谢,我在问题中添加了答案谢谢,我在问题中添加了答案,以什么方式是
eval
independent?我想要那种独立性,并且我想要单独获得控制台输出。我明白你的意思了,因为你的脚本存储为字符串,如果要
。用返回所需值的自定义函数替换
所有
控制台.log
s,该怎么办?@user11914177对于大多数用例,不建议使用
eval()
。通常有更好的解决方案。如果您能更详细地解释您想要实现的目标,我们可以为您提供更好的解决方案。见:!
eval
independent是以什么方式独立的?我想要这种独立性,并且我想要单独获得控制台输出。我明白你的意思了,因为你的脚本存储为字符串,如果要
。用返回所需值的自定义函数替换
所有
控制台.log
s,该怎么办?@user11914177对于大多数用例,不建议使用
eval()
。通常有更好的解决方案。如果您能更详细地解释您想要实现的目标,我们可以为您提供更好的解决方案。见:!这就是传说的答案否,对于
eval
是的,但我建议使用
IIFE
,它可以产生不同,并且
脚本中定义的变量仅限于自身。它不会影响全局变量。这就是图例的答案否,因为
eval
是的,但我建议使用
IIFE
,这会产生影响,并且
脚本中定义的变量仅限于自身。它不会影响全局变量。