Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试从switch语句中的函数返回值-JS-_Javascript_If Statement_Switch Statement - Fatal编程技术网

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

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(

我试着用switch语句来回答一些问题,我把它加进去。 我希望答案以用户名结尾,因此如果您在提示中键入“我的名字是Alex”,它将Alex保存在“var username;” 我希望“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>

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行
处理器(问题),这意味着处理器函数中的
输入
的值与变量
问题
的值相同。您可以阅读Javascript中的同步和异步函数,以便更好地了解代码的执行顺序。