Javascript 尝试从switch语句中的函数返回值-JS-
我试着用switch语句来回答一些问题,我把它加进去。 我希望答案以用户名结尾,因此如果您在提示中键入“我的名字是Alex”,它将Alex保存在“var username;” 我希望“username”在定义“sendUserName”函数之前就具有该值Javascript 尝试从switch语句中的函数返回值-JS-,javascript,if-statement,switch-statement,Javascript,If Statement,Switch Statement,我试着用switch语句来回答一些问题,我把它加进去。 我希望答案以用户名结尾,因此如果您在提示中键入“我的名字是Alex”,它将Alex保存在“var username;” 我希望“username”在定义“sendUserName”函数之前就具有该值 <html> <body> <script> var ask = prompt("Ask me anything >>").toLowerCase(
<html>
<body>
<script>
var ask = prompt("Ask me anything >>").toLowerCase();
function write(x) {
document.write(x)
};
//Capitalize the first letter func :
function capitalize(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
//..............
var question = ask.split(" ");
var date = new Date;
var userName;
//...............................
write(userName); // <------ here the issue , undefined !
if (question[0] === "what") {
switch (question[1]) {
case "time":
switch (question[2]) {
case "is":
switch (question[3]) {
case "it":
write(date);
break;
default:
};
break;
default:
};
break;
case "is":
switch (question[2]) {
case "your":
switch (question[3]) {
case "name":
write("Alex !");
break;
default:
};
break;
default:
};
break;
default:
write("unknown");
};
} else if (question[0] === "my") {
switch (question[1]) {
case "name":
switch (question[2]) {
case "is":
userName = capitalize(question[3]);;
alert("Your name is saved, " + userName);
function sendUserName() {
return userName;
}
break;
default:
};
break;
default:
};
};
sendUserName();
write(userName); // <------- it's work here
</script>
</body>
</html>
var ask=prompt(“询问我任何事情>>”).toLowerCase();
函数写入(x){
文件编写(x)
};
//将第一个字母func大写:
函数大写(字符串){
返回string.charAt(0.toUpperCase()+string.slice(1);
}
//..............
var问题=询问。拆分(“”);
var日期=新日期;
var用户名;
//...............................
写(用户名);// 在您的代码中,第一个write(userName)
在执行if-else语句和开关之前被调用。一个解决方法(我认为这也会改进结构)是定义一个新函数处理器(输入)
,并将所有逻辑放在那里,然后在调用write()
之前使用用户输入作为参数调用该函数。见下面的代码:
var ask = prompt("Ask me anything >>").toLowerCase();
function write(x) { document.write(x) };
//Capitalize the first letter func :
function capitalize(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
//..............
var input = ask.split(" ");
var date = new Date;
var userName;
//...............................
processor(question); // the processor function is called with the value of variable question
write(userName); // <------ Now it is defined even here
function processor(input) {
if (input[0] === "what") {
switch (input[1]) {
case "time":
switch (input[2]) {
case "is":
switch (input[3]) {
case "it":
write(date);
break;
default:
};
break;
default:
};
break;
case "is":
switch (input[2]) {
case "your":
switch (input[3]) {
case "name":
write("Alex !");
break;
default:
};
break;
default:
};
break;
default:
write("unknown");
};
} else if (input[0] === "my") {
switch (input[1]) {
case "name":
switch (input[2]) {
case "is":
userName = capitalize(input[3]);;
alert("Your name is saved, " + userName);
break;
default:
};
break;
default:
};
};
}
function sendUserName() {
return userName;
}
sendUserName();
var ask=prompt(“询问我任何事情>>”).toLowerCase();
函数write(x){document.write(x)};
//将第一个字母func大写:
函数大写(字符串){
返回string.charAt(0.toUpperCase()+string.slice(1);
}
//..............
var输入=ask.split(“”);
var日期=新日期;
var用户名;
//...............................
处理器(问题);//处理器函数是用变量的值来调用的
写(用户名);//不太清楚你在问什么。您能否提供预期的输入/输出示例并指定哪些不起作用?当然,我正在尝试打印变量“userName”中的值。。这是我们的主要目标。。。我做了一个switch语句,如果用户在提示窗口中键入“my name is anyName”,它将转到第二个if语句(问题[0]==my)问题[0],在本例中是=my。因此它将转到switch语句和下一个switch语句,直到它与函数sendUserName一起变成“is”。。。不起作用的是第一段代码中的“write(username);”@幻觉你能告诉我为什么我们定义了处理器函数吗?“输入”参数做了什么@请检查我的最新答案。我们定义了处理器(输入)
,以便将逻辑与全局范围隔离开来。一般来说,为尽可能多的逻辑定义函数是一个好主意。输入参数是本地参数,可以定义其值。注意,在第14行处理器(问题)调用code>,这意味着处理器函数中的输入
的值与变量问题
的值相同。您可以阅读Javascript中的同步和异步函数,以便更好地了解代码的执行顺序。