Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法用console.log或类似的东西跟踪无限循环?_Javascript_Jquery_Loops_Infinite Loop - Fatal编程技术网

Javascript 有没有办法用console.log或类似的东西跟踪无限循环?

Javascript 有没有办法用console.log或类似的东西跟踪无限循环?,javascript,jquery,loops,infinite-loop,Javascript,Jquery,Loops,Infinite Loop,我想知道是否有任何方法可以跟踪javascript/jquery中的无限循环 我正在做一个jsTree插件克隆。。(为什么不重要)我已经在某个地方创建了一个无限循环,我试图跟踪它发生的地方。我想可能有一些特定于浏览器的技巧来跟踪无限循环 例如 jQuery(文档).ready(函数($){ var i=0; 而(i

我想知道是否有任何方法可以跟踪javascript/jquery中的无限循环

我正在做一个jsTree插件克隆。。(为什么不重要)我已经在某个地方创建了一个无限循环,我试图跟踪它发生的地方。我想可能有一些特定于浏览器的技巧来跟踪无限循环

例如


jQuery(文档).ready(函数($){
var i=0;
而(i<10){
控制台日志(i);
$(“#someAwesomeDiv”)。追加(“
i
”) 我--; } });
当我刷新此页面时。。没有任何内容附加到div,也没有添加到console.logged,页面只是冻结


感谢您的光临。

这是假定的行为。您正在用无限循环定位JS引擎,它正在忙着这样做,而不是渲染(在开发工具窗口中的页面和控制台)。

这是假定的行为。你的JS引擎正在用无限循环定位,它正在忙着这样做,而不是渲染(开发工具窗口中的页面和控制台)。

如果你在查找和诊断无限循环时遇到困难,请将
控制台.log
调用抛出到所有可疑循环中,尝试使用and。当浏览器陷入无限循环时,
console.log
可能会有点不合作(或者听起来完全不起作用),而
alert
总是会立即工作

使用“确认”,您甚至可以更进一步,并且可以选择打破循环。例如,下面是修改后的示例代码,允许您随时中断循环

jQuery(document).ready(function ($) {
    var i = 0;
    while(i < 10){
        if (confirm("i = " + i + "; break the loop?")) {
          throw new Error("Loop broken by manual user override");
        }
        $('#someAwesomeDiv').append('<br>i</br>')
        i--;
    }
});
jQuery(文档).ready(函数($){
var i=0;
而(i<10){
如果(确认(“i=”+i+“断开循环?”){
抛出新错误(“手动用户覆盖导致循环中断”);
}
$(“#someAwesomeDiv”)。追加(“
i
”) 我--; } });

然后,如果你点击了无限循环,你可以选择抛出一个错误,并希望(除非它被捕获,或者相同的代码被立即再次触发)重新获得对窗口的控制,并在窗口和控制台中自由发挥,并试着找出导致循环的原因

不过,有两个警告:在某些浏览器中,
alert
confirm
有时会使代码中发生奇怪的事情,例如,在警报期间触发DOM事件时,会扰乱预期的执行顺序,正如bobince在此处详细描述的那样:。它们可以潜在地帮助您在无限循环中使用
console.log
,但要确保您不会被将
alert
s放入代码中所引入的行为更改绊倒。还请注意,当触发警报时会发生回流,这可能会更改涉及CSS转换的代码的行为


另外,我真的不知道为什么您在控制台中没有从您给出的示例代码中获得任何输出。当我将它粘贴到JSFIDLE并在Chrome上试用时,然后在控制台打开的情况下加载FIDLE时,页面速度慢且不可修改,整个浏览器有点出错,但我确实看到了日志记录的情况(必须承认,只有大约千行记录一次)。在Firefox中,大约5秒钟内没有任何事情发生,但随后我会弹出一个“无响应页面”,并选择终止正在运行的脚本,之后我可以看到控制台中记录的所有内容。也许尝试不同的浏览器(或您使用的任何浏览器的最新版本)会使您的生活更轻松,而无需部署任何技巧?

如果您通过向所有可疑循环中抛出
控制台.log
调用来查找和诊断无限循环时遇到困难,请尝试使用和。当浏览器陷入无限循环时,
console.log
可能会有点不合作(或者听起来完全不起作用),而
alert
总是会立即工作

使用“确认”,您甚至可以更进一步,并且可以选择打破循环。例如,下面是修改后的示例代码,允许您随时中断循环

jQuery(document).ready(function ($) {
    var i = 0;
    while(i < 10){
        if (confirm("i = " + i + "; break the loop?")) {
          throw new Error("Loop broken by manual user override");
        }
        $('#someAwesomeDiv').append('<br>i</br>')
        i--;
    }
});
jQuery(文档).ready(函数($){
var i=0;
而(i<10){
如果(确认(“i=”+i+“断开循环?”){
抛出新错误(“手动用户覆盖导致循环中断”);
}
$(“#someAwesomeDiv”)。追加(“
i
”) 我--; } });

然后,如果你点击了无限循环,你可以选择抛出一个错误,并希望(除非它被捕获,或者相同的代码被立即再次触发)重新获得对窗口的控制,并在窗口和控制台中自由发挥,并试着找出导致循环的原因

不过,有两个警告:在某些浏览器中,
alert
confirm
有时会使代码中发生奇怪的事情,例如,在警报期间触发DOM事件时,会扰乱预期的执行顺序,正如bobince在此处详细描述的那样:。它们可以潜在地帮助您在无限循环中使用
console.log
,但要确保您不会被将
alert
s放入代码中所引入的行为更改绊倒。还请注意,当触发警报时会发生回流,这可能会更改涉及CSS转换的代码的行为

另外,我真的不知道为什么您在控制台中没有从您给出的示例代码中获得任何输出。当我将它粘贴到JSFIDLE并在Chrome上试用时,然后在控制台打开的情况下加载FIDLE时,页面速度慢且不可修改,整个浏览器有点出错,但我确实看到了日志记录的情况(必须承认,只有大约千行记录一次)。在Firefox中,大约5秒钟内没有任何事情发生,但我会弹出一个“无响应页面”,并选择在之后终止正在运行的脚本