我在这里有一个奇怪的需求,我不确定它的可行性。我只能考虑如何使用线程(创建另一个线程来执行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)
}
}发布于 2010-09-01 21:06:18
这真的取决于你的目标受众(浏览器使用)。
您可以通过使用web workers获得一种非常有效的伪线程形式。
http://ejohn.org/blog/web-workers/
然而,这并没有得到广泛的支持。你可以在可用的地方使用它。
通过使用setTimeout执行代码,您还可以获得一些类似于线程的行为。
您可以在此处查看计时器是如何排队的:http://ejohn.org/blog/how-javascript-timers-work/
您还可以执行Quine计算服务器端,并使用AJAX调用。这确实给出了一个异步请求。
这最后两个选项不是线程化的,但是代码在继续之前不会等待响应。
发布于 2010-09-01 20:57:36
据我所知,JavaScript是纯单线程的。
此外,loadJSScript("C:\\Script\\Hello.js");语句很可疑,因为您提到了浏览器。浏览器中的JS (至少在Web页面中)不能访问文件系统(另外,这是不可移植的!)。
不过,你也许可以在微软的JScript ( WSH)中做类似的事情。
https://stackoverflow.com/questions/3618093
复制相似问题