Javascript:使用外部函数更改内部变量?
我试图运行一个函数来取消两个数字之间的公因数。取消函数在包装函数“multiplyFraction”之外,它不会更改multiplyFraction内部的变量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
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