Javascript:使用外部函数更改内部变量?

Javascript:使用外部函数更改内部变量?,javascript,function,variables,Javascript,Function,Variables,我试图运行一个函数来取消两个数字之间的公因数。取消函数在包装函数“multiplyFraction”之外,它不会更改multiplyFraction内部的变量 function cancelFac(num1,num2){ var minVal = Math.min(num1,num2); for(var i=2; i<=minVal; i++){ while(num1%i==0 && num2%i==0){ nu

我试图运行一个函数来取消两个数字之间的公因数。取消函数在包装函数“multiplyFraction”之外,它不会更改multiplyFraction内部的变量

function cancelFac(num1,num2){
    var minVal = Math.min(num1,num2); 
    for(var i=2; i<=minVal; i++){ 
        while(num1%i==0 && num2%i==0){ 
            num1 = num1/i;
            num2 = num2/i;
        }
    }
}


var multiplyFraction = function(){      
    var a = notZero(rand(13,0)); 
    var b = notZero(rand(13,0));

    //Cancel Common factors
    cancelFac(a,b);
}
函数cancelFac(num1,num2){
var minVal=Math.min(num1,num2);

对于(var i=2;i您可以使用cancelFac中的return函数以这种格式返回字符串“num1,num2”.现在在multiplyFraction方法中,拆分字符串并获得a和b的值。

a和b的值将保持不变,因为它们是基本类型,基本类型是按值传递而不是按引用传递的。如果要保持对传递的vlaues所做的更改,请按引用传递值,即传递对象指令基本类型的ead。或从
cancelFac
方法返回对象。请尝试此操作

function cancelFac(num1,num2){
    var minVal = Math.min(num1,num2); 
    for(var i=2; i<=minVal; i++){ 
        while(num1%i==0 && num2%i==0){ 
            num1 = num1/i;
            num2 = num2/i;
        }
    }

 return { num1: num1, num2: num2 };
}

var multiplyFraction = function(){      
  var obj = {
    a: notZero(rand(13,0)),
    b: notZero(rand(13,0))
  };

  //Cancel Common factors
  obj = cancelFac(obj.a, obj.b);
}
函数cancelFac(num1,num2){
var minVal=Math.min(num1,num2);

对于(var i=2;i此外,还可以返回包含num1和num2的数组:

function cancelFac(num1,num2){
    var minVal = Math.min(num1,num2); 
    for(var i=2; i<=minVal; i++){ 
        while(num1%i==0 && num2%i==0){ 
            num1 = num1/i;
            num2 = num2/i;
        }
    }
    return [num1, num2];
}

var multiplyFraction = function(){      
    var a = notZero(rand(13,0)); 
    var b = notZero(rand(13,0));

    //Cancel Common factors
    var result  = cancelFac(a,b);
    a = result[0];
    b = result[1];
}
函数cancelFac(num1,num2){
var minVal=Math.min(num1,num2);

对于(var i=2;i使用返回值返回对象(或数组)中更改的值:

函数cancelFac(num1,num2){
var minVal=Math.min(num1,num2);

对于(VarI=2;isorry)来说,我花了一年多的时间才接受这一点,我只是回顾了我以前的问题,发现我还没有这样做
function cancelFac(num1,num2){
    var minVal = Math.min(num1,num2); 
    for(var i=2; i<=minVal; i++){ 
        while(num1%i==0 && num2%i==0){ 
            num1 = num1/i;
            num2 = num2/i;
        }
    }
    return({a: num1, b: num2});
}

var multiplyFraction = function(){      
var a = notZero(rand(13,0)); 
var b = notZero(rand(13,0));

//Cancel Common factors
var result = cancelFac(a,b);
a = result.a;
b = result.b;
function cancelFac(in){
    var num1 = in.num1, num2 = in.num2;
    var minVal = Math.min(num1,num2); 
    for(var i=2; i<=minVal; i++){ 
        while(num1%i==0 && num2%i==0){ 
            num1 = num1/i;
            num2 = num2/i;
        }
    }
    // set results back into passed in object
    in.num1 = num1;
    in.num2 = num2;
}

var multiplyFraction = function(){      
var data = {num1: notZero(rand(13,0), num2: notZero(rand(13,0)};

//Cancel Common factors
cancelFac(data);
// data.num1 and data.num2 contain the two modified values