切换语句代码:
var data = "manager";
switch (data) {
case "manager" :
function test(){
console.log('manager');
}
test();
break;
case "worker" :
function test(){
console.log('worker');
}
test();
break;
default:
console.log('default');
} //output showing as 'worker' but expected output // 'manager'
但如果我尝试使用if条件,它将正常工作。
如果声明代码:
var data = "manager";
if (data == "manager") {
function test(){
console.log('manager');
}
test();
} else if(data == "worker"){
function test(){
console.log('worker');
}
test();
} else {
console.log('default');
} // got correct output as 'manager'
switch语句有什么问题?交换机是否作为异步工作?
答案 0 :(得分:4)
if语句将函数放在块{}
中,限制范围。
{
function test() {
console.log("one");
}
test();
}
function test() {
console.log("two");
}
开关盒没有块分隔符。因此,定义的最后一个test()
函数被调用。
function test() {
console.log("one");
}
test();
function test() {
console.log("two");
}
答案 1 :(得分:1)
不要在switch
语句中声明一个函数,也不要在不同的地方声明一个具有相同名称的函数。
试试这个:
var data = "manager";
function testWorker() {
console.log('worker');
}
function testManager() {
console.log('manager');
}
switch (data) {
case "manager": testManager(); break;
case "worker": testWorker(); break;
default: console.log('default');
}
function
声明被提升到其范围的顶部。由于switch
的情况没有自己的范围,因此function test(){
个声明都会移到顶部,这意味着manager
声明会覆盖worker
声明。< / p>
if / else
变体工作的唯一原因是因为这些块具有自己的范围。该功能只能在各自的if
/ else
块中访问。