我最近进入了一个项目,需要两个不同的方法来处理两个不同的变量,但我需要存储这两个值,以便在另一个函数中使用它们。
这有点复杂,所以让我解释一下。我有这个switch语句,可以监视几个数字:2,3,13,45
var hello;
switch ($variable) {
case 2:
//do something irrelevant
break;
case 3:
//do something irrelevant
break;
case 13:
//do something with variable named "hello". Ex.:
alert(hello);
break;
case 45:
hello = "hello";
break;
}
正如您所看到的,我需要在变量获取值之前获取“hello”的值。我无法更改顺序,也无法更改变量声明,因此我必须对此设置执行某些操作。
我想在13中进行函数调用:
function getMyVariable(variable) {
var v = variable;
return variable;
}
case 13:
getMyVariable(hello);
break;
然后当然函数仍将返回undefined。
我想做的是让函数等待45中的变量设置:
(请注意,这只是推测,这段代码无法靠近工作)
case 45:
hello = "hello";
getMyVariable(hello);
break;
function getMyVariable(variable) {
//function gets call from case 13
//if type is undefined, wait for a variable that isn't undefined
//if variable isn't undefined return the variable
}
所以基本上首先调用跳过案例13,让案例45设置变量,然后返回到案例13并在此处执行代码。 你可以跟我来吗?如果您需要更多信息,请告诉我!
答案 0 :(得分:1)
// this needs to be defined somewhere outside that it is preserved
// between calls to the code that contains `switch`
var doThisWhenHelloIsSet = [];
// ...
var hello;
switch ($variable) {
// ...
case 13:
doThisWhenHelloIsSet.push(function(h) {
// do something with argument named "h"
// (which will have the value of variable named "hello").
// Ex.:
alert(h);
});
break;
case 45:
hello = "hello";
for (var i = 0; i < doThisWhenHelloIsSet.length; i++) {
doThisWhenHelloIsSet[i](hello);
}
doThisWhenHelloIsSet = [];
break;
}
注意:如果您只想存储下一个操作,则不需要数组。
答案 1 :(得分:0)
我不完全确定,但这是你想要的吗?
var hello = null;
switch ($variable) {
case 2:
//do something irrelevant
break;
case 3:
//do something irrelevant
break;
case 13:
//do something with variable named "hello". Ex.:
if ( hello !== null) {
alert(hello);
}
break;
case 45:
hello = "hello";
break;
}
答案 2 :(得分:0)
您可以使用case
变量汇总hello
项检查。检查是否已使用检查$variable === 13
。
var hello;
switch (true) {
case $variable === 2:
// blah
break;
case $variable === 3:
// blah
break;
// this will get called when $variable is 13,
// and hello is not blank anymore
case !!hello && $variable === 13:
// do something magical
break;
case $variable === 45:
// set hello somewhere?
hello = 'hello';
break;
}
如果你的意思是同时处理case 13
和case 45
逻辑,你总是可以试一试(尽管要小心)。
var hello;
switch ($variable) {
case 2 :
// blah
break;
case 3 :
// blah
break;
// notice I switched these last two up
case 45 :
hello = 'hello';
// notice that there's no break statement
// so the logic flows into the case 13 right after case 45.
case 13 :
if (!!hello) {
// do something magical with hello
}
break;
}
答案 3 :(得分:-1)
你可以简单地滥用for循环(或任何循环)来编写JS中的goto:
var x=false, y=5;
above: for(;;){
switch(y){
case 3: x=true; break;
case 5: y=3; continue above;
}
break above;
}
alert([x,y]); // shows: true,3
我宁愿看到你使用异步模式,不管怎么说这些都很流行,但如果其他所有方法都失败了,也许这会有所帮助。