Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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_Recursion - Fatal编程技术网

当函数调用自身时,Javascript变量会发生变化

当函数调用自身时,Javascript变量会发生变化,javascript,recursion,Javascript,Recursion,我正在创建一个网页,可以找到一个数的素数分解。我使用的函数从循环中调用自身。在我在其内部执行该函数之后,循环的索引将从第二次调用时到达的索引更改。它应该返回数组中的所有素因子。这是代码 function pf(num){ max=Math.floor(Math.sqrt(number)); factors=[]; prime=true; for(count=2;count<=max;count++){ ratio=num/count;

我正在创建一个网页,可以找到一个数的素数分解。我使用的函数从循环中调用自身。在我在其内部执行该函数之后,循环的索引将从第二次调用时到达的索引更改。它应该返回数组中的所有素因子。这是代码

function pf(num){
    max=Math.floor(Math.sqrt(number));
    factors=[];
    prime=true;
    for(count=2;count<=max;count++){
        ratio=num/count;
        if(ratio%1==0){
            alert(count);//HERE
            factors=pf(ratio);
            alert(count);//HERE
            factors.push(count);
            prime=false;
            break;
        }
    }
    if(prime){
        factors.push(num);
    }
    return factors;
}
函数pf(num){
最大值=数学地板(数学sqrt(数字));
因子=[];
prime=true;

对于(count=2;count您确实应该对所有变量使用
var
,除非您特别希望它们是全局变量。
var
使变量成为执行上下文的局部变量,在本例中是函数
pf
。没有它,所有变量都是全局变量,如果您正在运行该函数,则可能在
窗口上它在浏览器中

我怀疑您的问题是因为
max
和/或
count
是全局性的

var max=Math.floor(Math.sqrt(number));


用于(var count=2;count除非您特别希望变量是全局变量,否则您确实应该对所有变量使用
var
var
使变量成为执行上下文的局部变量,在本例中是函数
pf
。没有它,所有变量都是全局变量,如果您正在运行,则可能在
窗口上这将在浏览器中显示

我怀疑您的问题是因为
max
和/或
count
是全局性的

var max=Math.floor(Math.sqrt(number));


for(var count=2;count函数中的变量都是所谓的全局变量。这意味着它们可以(也将)从脚本中的任何地方更改。而且它们在函数完成后保留其值。因此,它们在每次函数调用时具有不同的初始值

要将变量保留在函数中,必须将它们定义为局部变量。这可以在第一次定义变量时使用关键字
var
来完成

只要写

function pf ( num ) {
    var max = ...
    var factors = ...
等等


这是一种更好、更干净的方法,可以帮助您避免此类错误。

函数中的变量都是所谓的全局变量。这意味着它们可以(也将)在脚本中的任何位置进行更改。而且它们在函数完成后保留其值。因此,它们在每次函数调用时具有不同的初始值

要将变量保留在函数中,必须将它们定义为局部变量。这可以在第一次定义变量时使用关键字
var
来完成

只要写

function pf ( num ) {
    var max = ...
    var factors = ...
等等


这是一种更好、更干净的方法,可以帮助您避免此类错误。

谢谢。我想这就是我从不键入var所得到的。谢谢。我想这就是我从不键入var所得到的。