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