0

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

2 回答 2

1

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

您可以通过使用 Web Worker 获得一种非常有效的伪线程形式。

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

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

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

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

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

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

于 2010-09-01T13:06:18.307 回答
0

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

于 2010-09-01T12:57:35.583 回答