我试图制作可以回答我添加到其中的一些问题的切换语句。 我希望答案以用户的名字结束,所以如果你输入了提示符,那么我的名字就是Alex"它会将Alex保存在" var用户名中;" 我想要"用户名"甚至在定义" sendUserName"之前就具有该值;功能
Positive
答案 0 :(得分:1)
在您的代码中,在您通过if-else语句和开关之前调用第一个write(userName)
。解决方法(在我看来也会改进结构)是定义一个新函数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()
中取出它,使其成为全局函数。当然,如果你愿意,你可以把它放回去,但是要注意,如果你没有达到定义该函数的逻辑部分,你可能会通过调用函数来发现错误。