Javascript Switch无法按预期工作

时间:2014-11-14 07:10:58

标签: javascript switch-statement

我使用switch语句来测试span的名称属性:

<span id = "prompt" title = "newPerson">What is your name?</span>
<button type = "button" id = "execute">Do It!</button>
<input type="text" id="input" />


document.getElementById("execute").addEventListener("click",execute);


function execute(){
    var action = document.getElementById("prompt").title;
    var request = document.getElementById("input").value;
    if(action == "newPerson"){ alert("WTF"); }  //Alerts as expected
    this.act = function(action, request){
        switch(action){ //Default case always gets called
            case "newPerson":
                person = new Person(request, 0, 0);
                account = new Account(person);
                break;
            default:
                alert("Internal Error :(");
                break;
        }
    }
    if(request == ""){
        alert("No Input");
    }else{
        this.act();
    }
}

我也尝试将其更改为“newPerson&#39;”。我也尝试改变我的使用&#39; ===&#39;而不是&#39; ==&#39;我仍然得到了&#34; WTF&#34;警报。看起来这应该是任何想法?

1 个答案:

答案 0 :(得分:1)

这很简单。 在调用this.act时,您没有传递任何参数 - 因此使用切换运算符的函数体中的action参数是undefined - &gt;调用默认情况。

您基本上可以将功能签名更改为以下

...
this.act = function(){
...

然后您将生成一个闭包,并且将从外部范围使用actionrequest值。

或者你可以在调用函数时更改这部分代码并传递如下参数:

...
if (request == ""){
    alert("No Input");
} else {
    this.act(action, request);
}
...

注意: 通常,使用与外部作用域中的变量同名的函数参数是一种糟糕的模式 - 它可能会导致误解,就像你的情况一样。