【问题标题】:Javascript: Execute and Quine at the same timeJavascript:同时执行和Quine
【发布时间】:2010-09-01 12:47:08
【问题描述】:

我在这里有一个奇怪的需求,我不确定它的可行性。我只能想我将如何使用线程来做到这一点(要创建另一个执行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)
     }
}

【问题讨论】:

    标签: javascript multithreading logging concurrency quine


    【解决方案1】:

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

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

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

    但是,这并未得到广泛支持。您可以在可用的情况下使用它。

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

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

    你也可以做Quine计算服务器端,并使用AJAX调用。这确实给出了一个异步请求。

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

    【讨论】:

    【解决方案2】:

    据我所知,JavaScript 是纯单线程的。
    此外,loadJSScript("C:\\Script\\Hello.js"); 声明很可疑,因为您提到了浏览器。浏览器中的 JS(至少在网页中)无法访问文件系统(此外,这不是可移植的!)。
    不过,您也许可以在 Microsoft 的 JScript(在 WSH 中)中执行类似的操作。

    【讨论】:

    • 它是驻留在客户端应用程序中的浏览器,具有文件系统功能,使用一些专有的 javascript 函数。感谢您的回复:)