基本Javascript菜单程序中的函数出现问题
Trouble with Functions in basic Javascript menu program
在我的Comp Sci入门课程中,教授要求我们将函数实现为一个主函数,用于我们已经用do while完成的作业,以及循环、切换语句和基本条件编程。然而,他并没有很好地指导我们如何做到这一点。
这就是原始赋值中的代码在没有函数的情况下的样子。
<html>
<head>
</head>
<body>
<script>
var menu_choice;
do {
menu_choice = 1 * prompt("-----Menu------'n'n" +
"1. Addition'n" +
"2. Multiplication'n" +
"3. Expenentiation'n" +
"4. String Concatenation'n" +
"5. Logical AND (&&)'n" +
"6. Logical OR (||)'n" +
"7. Quit'n'n" +
"Enter your choice (1-7):");
switch (menu_choice) {
case 1:
var iterations = 1*prompt("Enter number of numbers to add");
var sum = 1*prompt("Enter a number:");
for(var i = 1;i < iterations; i++){
sum += 1*prompt("Enter a number:");}
alert("The sum is " + sum);
document.write("The sum is " + sum + "<br><br>");
break;
case 2:
var iterations = 1*prompt("Enter number of numbers to multiply");
var product = 1;
for(var i = 1;i <= iterations; i++){
product *= 1*prompt("Enter a number:");}
alert("The product is " + product);
document.write("The product is " + product + "<br><br>");
break;
case 3:
var iterations = 1*prompt("Enter number of numbers to exponentiate");
var result = 1*prompt("Enter a number");
for(var i = 1;i < iterations; i++){
result = Math.pow(result, 1*prompt("Enter a number"));}
alert("The exponentiation is " + result);
document.write("The exponentiation is " + result + "<br><br>");
break;
case 4:
var iterations = 1*prompt("Enter the number of strings to concatenate:");
var result = prompt("Enter a string");
for(var i = 1;i < iterations; i++){
result += prompt("Enter a string");}
alert("The concatenated string is " + result);
document.write("The concatenated string is " + result + "<br><br>");
break;
case 5:
var iterations = 1*prompt("Enter the number of booleans to AND:");
var string = prompt("Enter a boolean (true or false):").toLowerCase();
var result = string;
if (result === "true")
var result = true;
else
var result = false;
for (var i = 1; i < iterations; i++){
var string = prompt("Enter a boolean (true or false):").toLowerCase();
var newbool = string;
if (newbool === "true")
var newbool = true;
else
var newbool = false;
var result = (result && newbool)
}
alert("The ANDing of the booleans is: " + result);
document.write("The ANDing of the booleans is: " + result + "<br><br>");
break;
case 6:
var iterations = 1*prompt("Enter the number of booleans to OR:");
var string = prompt("Enter a boolean (true or false):").toLowerCase();
var result = string;
if (result === "true")
var result = true;
else
var result = false;
for (var i = 1; i < iterations; i++){
var string = prompt("Enter a boolean (true or false):").toLowerCase();
var newbool = string;
if (newbool === "true")
var newbool = true;
else
var newbool = false;
var result = (result || newbool)
}
alert("The ORing of the booleans is: " + result);
document.write("The ORing of the booleans is: " + result + "<br><br>");
break;
case 7:
document.write("Quitting the program...");
break;
default:
document.write("Error: invalid input (must be 1-7)<br><br>");
}
}
while (menu_choice !== 7)
</script>
</body>
</html>
现在我只是想研究案例1,但我想我正忙于为"+="运算符编写一个函数。在测试中(使用JSrunner),我只得到了使用两个数字的函数。
以下是我为案例1测试的代码。
var number_of_numbers, final_result;
var iterations = function (op)
{
return 1*prompt("Enter the number of numbers to " + op + ":");
};
var input = function()
{
return 1*prompt("Enter a number:");
};
var sum_plus = function()
{
var result = input();
return result += 1*prompt("Enter a number:");
};
number_of_numbers = iterations("add");
for(var i = 1;i < number_of_numbers; i++){
final_result = sum_plus();};
alert("The sum is " + final_result);
是否可以将for循环放在sum_plus函数内部?还是在for循环中调用函数更好?
如有任何帮助,我们将不胜感激。
了解代码在做什么很重要。为了回答您的问题,我们真正需要查看的唯一代码是sum_plus
函数
var sum_plus = function() {
var result = input();
return result += 1*prompt("Enter a number:");
};
运行它的代码:
number_of_numbers = iterations("add");
for(var i = 1;i < number_of_numbers; i++) {
final_result = sum_plus();
}
alert("The sum is " + final_result);
现在,对于每个迭代,此代码都将调用sum_plus()
。sum_plus()
将:
1) 向用户询问数字并将其存储在变量result
中
var result = input();
2) 向用户询问另一个数字,将其乘以1,将其添加到变量result
并返回
return result += 1*prompt("Enter a number:");
因此,每次运行for
循环时,您的代码都会取两个数字,将它们相加,并将它们存储在final_result
中,然后在最后提醒最后输入的两个数字的总和。
这听起来像是你想让你的代码做的,就是让input()
将它存储在result
中,然后运行一个循环,该循环接受一个新的输入值并将其添加到result
中。
您的sum_plus
函数应该如下所示:
var sum_plus = function(iteration_count) {
// Take an input and store it in the variable `result`
var result = input();
// Run a loop `iteration_count` times
for (var i = 0; i < iteration_count; i++) {
// Every time the loop runs, take an input and add it to result
result += input(); // This is the same as `result = result + input();
}
// Return the value
return result;
}
现在你可以用调用函数
alert(sum_plus(iterations("add")));
或者是几乎完全相同的更长版本:
var iterations = iterations("add");
var sum = sum_plus(iterations);
alert(sum);
请确保您真正理解这是如何工作的,而不仅仅是复制我的代码。函数和循环是现代代码的构建块。没有他们,你将一事无成。如果你对正在发生的事情有任何疑问,请随时询问
功能帮助:http://www.w3schools.com/js/js_functions.asp
for
循环的帮助:http://www.w3schools.com/js/js_loop_for.asp
- Javascript时间函数问题
- Javascript Array 的求和函数问题
- Jshint:循环中的匿名函数(问题)
- WordPress FAQ 手风琴自定义帖子类型 - 匿名函数问题.
- JavaScript 中的滚动函数问题
- Google JS API: gapi.auth.signIn 回调函数问题
- Javascript onclick 函数问题
- Javascript中的循环和函数问题
- 达到 10 次摘要迭代,中止(作用域函数问题)
- 洛达什 _.合并函数问题
- jQuery .unload() 函数问题,仅在单击特定链接时激活
- 回调函数问题
- Javascript语法函数问题
- Ajax 完整函数问题
- TypeError getElementsByTagName不是函数问题
- Jquery自定义函数问题
- angularjs编译指令中的函数问题
- JQuery-JNotify-点击函数问题
- Node Js中的回调函数问题
- javascript中的ie8拆分函数问题