2014-09-29 88 views
0

getBottles()中的循环迭代但不会将totalBottles的值传递给main()。 即时通讯新的JS,并可以使用一些帮助更好的细节。当运行脚本返回0 totalBottles。请帮忙。JS循环迭代但值不通过

//main function calls other functions 
function main(){ 
    var totalBottles = 0; 
    var counter = 1; 
    var todayBottles = 0; 
    var totalPayout = 0; 
    var keepGoing = "y"; 

    while(keepGoing == "y"){ 
     getBottles(totalBottles, todayBottles, counter); 
     calcPayout(totalPayout, totalBottles); 
     printInfo(totalBottles, totalPayout); 
     inputStr = prompt("Do you want to run the program again? (Enter y for yes)"); 
     keepGoing = inputStr; 
    } 
} 
//getBottles function gets loops to get # bottles each day for a week 
function getBottles(totalBottles, todayBottles, counter){ 
    while(counter <= 7){ 
     inputStr = prompt("Enter number of bottles returned for the day:"); 
     todayBottles = parseFloat(inputStr); 
     totalBottles = totalBottles + todayBottles; 
     counter = counter + 1; 
    } return totalBottles; 
} 

//calcPayout function calculates payout for all bottles returned in a week 
function calcPayout(totalPayout, totalBottles){ 
    totalPayout = 0; 
    totalPayout = totalBottles * .10; 
    return totalPayout; 
} 

//printInfo function displays totsl bottles and total payout for week 
function printInfo(totalBottles, totalPayout){ 
    alert("Total bottles returned this week: " + totalBottles); 
    alert("Total payout this week: $" + totalPayout.toFixed(2)); 
} 

main(); 

回答

1

你getBottles功能不改变你的主声明,因为它正在由局部变量阴影的totalBottles变量声明为参数getBottles:

function getBottles(totalBottles, todayBottles, counter) {...} // totalBottles here is a local variable to getBottles as are the other parameters 

totalBottles在这个函数声明成为这个函数的局部变量,这意味着只有通过这个函数的主体才能知道对totalBottles的任何修改。您从该函数返回此值,但由于您从不将该返回值分配给任何内容,因此该值基本上被丢弃。对于其他函数也是如此,例如calcPayout。你有几个选择。你可以改变你的函数的签名,让你不再阴影中的变量主要有声明为函数的参数局部变量被声明:

function getBottles() {...} 

通过这样做,你就不会传递变量中的功能,而仅仅主要()的范围内使用它们从:

getBottles();  

由此,getBottles形成在totalBottles,todayBottles,并且计数器变量的封闭,并且这些变量将被用于和通过改性getBottles。您的其他选项是分配返回值:

var bottles = getBottles(totalBottles, todayBottles, counter); 

该值可以传递到下一个函数中。请记住,您需要对其他功能执行相同的操作。