当函数调用自身时,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所得到的。