Javascript:同时执行和Quine

时间:2010-09-01 12:47:09

标签: javascript multithreading logging concurrency quine

我在这里有一个奇怪的需求,我不确定它的可行性。我只能想到我将如何使用线程(要创建另一个执行Quine函数的线程,同时运行我想要Quine并同时执行的脚本的线程(不需要在任何地方手动添加警报!!!),但是javascript没有那个功能,对吗?

我有一些JavaScript,它由一个具有最小JavaScript调试功能的应用程序解释。我的脚本正在崩溃,因为它也使用了一些只能被这个应用程序理解的语句,我无法在Firefox或Internet Explorer中调试它,因为它们无法处理这些自定义语句。我希望我能够实现的是一个程序,它可以模仿另一个程序,但也可以执行它自己的功能。

为了论证,我说有一个名为hello.js的脚本输出“Hello World!” 100次,当提供给应用程序时,它解释了这一点,但是在某些时候会出现问题,但由于调试能力有限,我无法分辨原因,地点和时间。

function main(){
     for(var i=0; i<100; i++){
          alert('Hello World!\n');
     }
}

然后我希望有一个脚本,我可以传递给应用程序而不是假装是上面的脚本,但也会在每个语句执行之前发出警报。我可以这样做:

function main(){
     alert('main()')
     for(var i=0; i<100; i++){
          alert("alert('Hello World!\n');");
          alert('Hello World!\n');
     }
}

但是我相信你可以看到长期计划如何这将是一项艰巨的任务。相反,我想制作一个可以像这样执行的程序:

function main(){
     var text = loadJSScript("C:\\Script\\Hello.js"); //Loads a text/javascript file line by line into an array
     for(var i=0; i<text.length; i++){
          var statement = text[i];
          alert("Line Number: " + i + " Statement: " + statement); //Output the line number and statement before executing
          execute(statement); //A function that executes the statement from the other file (as if a separate thread)
     }
}

2 个答案:

答案 0 :(得分:1)

这实际上取决于您的目标受众(浏览器使用)。

您可以使用网络工作者获得一种非常有效的伪线程形式。

http://ejohn.org/blog/web-workers/

然而,这并未得到广泛支持。您可以在可用的地方使用它。

通过使用setTimeout执行代码,您还可以获得类似于线程的一些行为。

您可以在此处查看计时器的排队方式: http://ejohn.org/blog/how-javascript-timers-work/

您也可以进行Quine计算服务器端,并使用AJAX进行调用。这确实提供了异步请求。

最后两个选项不是线程,但代码不会在继续之前等待响应。

答案 1 :(得分:0)

据我所知,JavaScript纯粹是单线程的 此外,loadJSScript("C:\\Script\\Hello.js");声明很可疑,因为你提到了浏览器。浏览器中的JS(至少在网页中)无法访问文件系统(旁边,那不可移植!) 不过,你可以在微软的JScript(在WSH中)做类似的事情。