gpt4 book ai didi

javascript - 尝试从 switch 语句中的函数返回值 -JS-

转载 作者:行者123 更新时间:2023-11-27 23:11:50 27 4
gpt4 key购买 nike

我正在尝试制作 switch 语句来回答我将其添加到其中的一些问题。我希望答案以用户名结尾,因此如果您输入提示“我的名字是 Alex”,它会将 Alex 保存在“var username ;”中我希望“用户名”在定义“sendUserName”函数之前就具有该值。

<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>

最佳答案

在您的代码中,第一个 write(userName)在执行 if-else 语句和开关之前调用。一种解决方法(我认为这也可以改善结构)是定义一个新函数 processor(input)并将所有逻辑放在那里,然后在调用 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();

我没怎么接触过你的代码。我刚刚将你所有的逻辑转储到函数 processor(input) 中并且还采取了功能 sendUserName()摆脱它,使其全局化。当然,如果您愿意,您可以将其放回原处,但请注意,如果您没有到达定义该函数的逻辑部分,则调用该函数时可能会遇到错误。

关于javascript - 尝试从 switch 语句中的函数返回值 -JS-,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36128866/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com