Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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 `对于`调试无限循环的普通语法_Javascript - Fatal编程技术网

Javascript `对于`调试无限循环的普通语法

Javascript `对于`调试无限循环的普通语法,javascript,Javascript,我找到了这个函数。它接受整数数组并返回它们的最大公约数。有时它会进入一个无休止的循环,并使浏览器崩溃。我想调试它以找到原因,但我不理解fors中使用的语法。如何将这些重新写入普通forvar i;我试试看 var r, a, i = o.length - 1 var b = o[i]; while(i) { a = o[--i]; while(r = a % b) { a = b; b = r; } return b; } 我试试看 var r, a, i = o.l

我找到了这个函数。它接受整数数组并返回它们的最大公约数。有时它会进入一个无休止的循环,并使浏览器崩溃。我想调试它以找到原因,但我不理解fors中使用的语法。如何将这些重新写入普通forvar i;我试试看

var r, a, i = o.length - 1
var b = o[i];

while(i) {
  a = o[--i];
  while(r = a % b) {
   a = b;
   b = r;
 }
 return b;
}
我试试看

var r, a, i = o.length - 1
var b = o[i];

while(i) {
  a = o[--i];
  while(r = a % b) {
   a = b;
   b = r;
 }
 return b;
}

这个for做的事情与您以前看到的相同,但只是每个部分都有更多的步骤。报告分为三个部分:

第一部分:初始化变量

第2部分:验证for是否应继续迭代

第三部分:增加或减少变量

如果你看它,你会看到一些逗号;它用于声明多个变量或条件。下面的代码与您发布的代码相同,但在某种程度上您似乎很熟悉:

mdc = function(o){
if(!o.length)
    return 0;
    var r;
    var a;
    var i = o.length - 1;
    for(var b = o[i]; i;) {
        for(a = o[--i]; r = a % b;b = r) {
           a = b;
        }
        return b;
    }
}; 

您可以注意到第二个以;,这相当于一个命令行,这就是为什么其中只有a=b命令,而不是返回b

这个for做的事情与您以前看到的相同,但只是在每个部分都有更多的步骤。报告分为三个部分:

第一部分:初始化变量

第2部分:验证for是否应继续迭代

第三部分:增加或减少变量

如果你看它,你会看到一些逗号;它用于声明多个变量或条件。下面的代码与您发布的代码相同,但在某种程度上您似乎很熟悉:

mdc = function(o){
if(!o.length)
    return 0;
    var r;
    var a;
    var i = o.length - 1;
    for(var b = o[i]; i;) {
        for(a = o[--i]; r = a % b;b = r) {
           a = b;
        }
        return b;
    }
}; 

您可以注意到第二个以;,这相当于一个命令行,这就是为什么其中只有a=b命令,而不是返回b

这里是从for循环到while循环的直译:

mdc = function(o){
    if(!o.length)
        return 0;
    var r;
    var a;
    var i = o.length - 1;
    var b = o[i];
    while (i) {
        a = o[--i];            
        while (r = a % b) {
            a = b;
            b = r;
        }
    }        
    return b;
}; 
下面是一个翻译,它解压了一些愚蠢之处,并重命名了变量:

mdc = function(o){
    if(!o.length)
        return 0;
    var cur_index = o.length - 1;
    var b = o[cur_index];
    while (cur_index) {
        cur_index -= 1;
        var a = o[cur_index];              

        var remainder = a % b;         
        while (remainder) {
            a = b;
            b = remainder;
            remainder = a % b;
        }
    }        
    return b;
}; 

以下是从for循环到while循环的直译:

mdc = function(o){
    if(!o.length)
        return 0;
    var r;
    var a;
    var i = o.length - 1;
    var b = o[i];
    while (i) {
        a = o[--i];            
        while (r = a % b) {
            a = b;
            b = r;
        }
    }        
    return b;
}; 
下面是一个翻译,它解压了一些愚蠢之处,并重命名了变量:

mdc = function(o){
    if(!o.length)
        return 0;
    var cur_index = o.length - 1;
    var b = o[cur_index];
    while (cur_index) {
        cur_index -= 1;
        var a = o[cur_index];              

        var remainder = a % b;         
        while (remainder) {
            a = b;
            b = remainder;
            remainder = a % b;
        }
    }        
    return b;
}; 

for循环的基本公式是

for(initial code; condition to check for; code to execute after loop)
{
    loop
}
我不喜欢那段代码中的语法。只需在顶部声明所有变量。因为您最感兴趣的是调试代码,所以每行最好有一条语句

mdc = function(o)
{
    if(!o.length)
        return 0;
    var r, a, b, i;
    i = o.length - 1;
    b = o[i];
    while(i)
    {
        a = o[i];
        i--;
        while(r = a % b)
        {
            a = b;
            b = r;
        }
    }
    return b;
};

for循环的基本公式是

for(initial code; condition to check for; code to execute after loop)
{
    loop
}
我不喜欢那段代码中的语法。只需在顶部声明所有变量。因为您最感兴趣的是调试代码,所以每行最好有一条语句

mdc = function(o)
{
    if(!o.length)
        return 0;
    var r, a, b, i;
    i = o.length - 1;
    b = o[i];
    while(i)
    {
        a = o[i];
        i--;
        while(r = a % b)
        {
            a = b;
            b = r;
        }
    }
    return b;
};

``我认为问题是a,b需要互换,这取决于哪个更大。第二个是for循环。欧几里德算法就是这样做的。这个似乎没有那么做

数字数组的GCD:我将使用标准的欧几里德算法

如果从末尾开始迭代: GCD a,b=K 现在调用GCDK,数组中的下一个元素。这应该行得通

enter code here
  Written in Pseudo-code What he is trying to do is more understandable:  
   For(b =array[end];   )    
     { 
      For(a= array[end-1]; end >=0 ;end --)  
          {
          (i)Divide a/b
          (ii)Put the new 'reduced' divisor in 'b'.
         (iii)Put the reminder back in c 
          }     
         end --
      } 

           }
       }
那么,在循环结束时,什么都可以 他试图模拟的是一系列数字的gcd的手工除法计算——高中的把戏


正如我上面提到的,问题在于交换更大的a,b

``我认为问题在于a和b需要互换,这取决于哪个更大。第二个是for循环。欧几里德算法就是这样做的。这个似乎没有那么做

数字数组的GCD:我将使用标准的欧几里德算法

如果从末尾开始迭代: GCD a,b=K 现在调用GCDK,数组中的下一个元素。这应该行得通

enter code here
  Written in Pseudo-code What he is trying to do is more understandable:  
   For(b =array[end];   )    
     { 
      For(a= array[end-1]; end >=0 ;end --)  
          {
          (i)Divide a/b
          (ii)Put the new 'reduced' divisor in 'b'.
         (iii)Put the reminder back in c 
          }     
         end --
      } 

           }
       }
那么,在循环结束时,什么都可以 他试图模拟的是一系列数字的gcd的手工除法计算——高中的把戏


正如我上面提到的,问题在于交换更大的a,b

多么神秘。。代码太聪明了。把它分开:forinit;条件post..@pst,我会的,但问题是init、condition和post之间的边界不清楚,我无法进行正确的关联。边界是分号。逗号可以分解为init、condition和post的多语句版本。注意,外部循环的post是空的。多么神秘。。代码太聪明了。把它分开:forinit;条件post..@pst,我会的,但问题是init、condition和post之间的边界不清楚,我无法进行正确的关联。边界是分号。逗号可以分解为init、condition和post的多语句版本。请注意,外部环路的post是空的。