#javascript #node.js
Вопрос:
Многие ответы, которые я читал, не имеют функций. Однако мне абсолютно необходимо включить функции in в свой сценарий.
var input = require('readline-sync')
var cart = [];
function func2() {
console.log("this is the inner function")
while (true) {
firstinput = input.questionInt('Please Enter your input (1, 2, 3). Press 0 to Go back to outermost loop. You will still be in the program.')
switch (firstinput) {
case 0:
break; //breaks out of this entire func2()
case 1:
func3()
break; //breaks, but goes back to firstinput
case 2:
func4() //im not going to define it here, but similar to func3()
func5() //im not going to define it here, but similar to func3()
break;
case 3:
func5()
func3() //as you can see, the functions are recurring
break;
default:
console.log('Input valid number, please')
continue;
}
}
}
function func3() {
while (true) {
secondinput = input.question("Hi, please pick 1a, 1b, or 1c! You can Press 0 to exit to the outermost function. YOu will still be in the program, though")
switch (secondinput) {
case '0':
break; //breaks out of func3() and func2()
case '1a':
cart.push("1a")
break; //breaks out of func3()
case '1b':
cart.push("1b")
break; //breaks out of func3()
case '1c':
cart.push('1c')
break; //breaks out of func3()
default:
console.log('invalid input')
continue;
}
}
}
function func1() {
while (true) {
func2()
if ((secondinput == 0) || (firstinput == 0)) {
console.log("I see you've pressed 0. Let's loop through again")
}
else {
console.log('Here is what was in your cart: ' cart)
}
}
}
func1()
Надеюсь, это было ясно! Мне нужно вырваться из внутренних функций и внешних функций. это сложно, потому что, если я изменил значение переменной в функции, значение снаружи не изменится.
Заранее спасибо
мой вопрос: когда я войду в func3(), как мне вырваться из всего, если я нажму «0»?
Комментарии:
1. Использование
break
таким образом должно привести только к разрыву текущего цикла. Я не мог поверить, чтоbreak
в вашемswitch
at func2 ведет себя по-другому.
Ответ №1:
Вы можете вернуться, когда захотите остановить функцию или продолжить цикл.
while (true) {
firstinput = input.questionInt('Please Enter your input (1, 2, 3). Press 0 to Go back to outermost loop. You will still be in the program.')
switch (firstinput) {
case 0:
return; //breaks out of this entire func2()
case 1:
func3()
continue; //breaks, but goes back to firstinput
case 2:
func4()
func5()
continue;
case 3:
func5()
func3() //as you can see, the functions are recurring
continue;
default:
console.log('Input valid number, please')
continue;
}
}
Комментарии:
1. Однако, когда я попадаю в функцию func3 (), как мне нажать 0, чтобы вернуться к началу?
2. случай 0: функция возврата func1();
Ответ №2:
Вы должны использовать комбинацию возврата/разрыва/продолжения, как здесь
// var input = require('readline-sync')
var cart = [];
let firstinput, secondinput;
function func2() {
console.log("this is the inner function")
while (true) {
firstinput = prompt('Please Enter your input (1, 2, 3). Press 0 to Go back to outermost loop. You will still be in the program.')
console.log({firstinput})
switch (firstinput) {
case 0:
return; //breaks out of this entire func2()
case 1:
func3()
break; //breaks, but goes back to firstinput
case 2:
func4() //im not going to define it here, but similar to func3()
func5() //im not going to define it here, but similar to func3()
break;
case 3:
func5()
func3() //as you can see, the functions are recurring
break;
case 4: // show cart
case -1: // exit everything
return;
default:
console.log('Input valid number, please')
continue;
}
}
}
function func3() {
while (true) {
secondinput = prompt("Hi, please pick 1a, 1b, or 1c! You can Press 0 to exit to the outermost function. YOu will still be in the program, though")
switch (secondinput) {
case '0':
return false; //breaks out of func3()
case '1a':
cart.push("1a")
return true; //breaks out of func3()
case '1b':
cart.push("1b")
return true; //breaks out of func3()
case '1c':
cart.push('1c')
return true; //breaks out of func3()
default:
console.log('invalid input')
continue;
}
}
}
function func1() {
while (true) {
func2()
if ((secondinput == 0) || (firstinput == 0)) {
console.log("I see you've pressed 0. Let's loop through again")
} else if(firstinput === -1) {
return
}
else {
console.log('Here is what was in your cart: ' cart)
}
}
}
func1()
Вы также можете использовать помеченный разрыв для выхода из такого блока
let i=0
a: while(true){
i
switch(i) {
case 4:
break a; // break the while loop
default:
console.log(i);
}
}
// prints
// 1
// 2
// 3
Для получения дополнительной информации о помеченном разрыве проверьте это
Комментарии:
1. спасибо за ваш ответ, но мне нужны функции, поэтому мне нужно, чтобы они были закодированы таким образом, чтобы, если я нажму 0 в функции func3() [которая является внутренней функцией ВНУТРЕННЕЙ функции], она дойдет до самого внешнего цикла и напечатает «Я вижу, что вы нажали 0. Давайте пройдем еще раз».