Switch 语句无法正常工作 - Javascript

Switch statement not working properly - Javascript

切换语句代码:

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 条件尝试此操作,它将正常工作。

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 语句有什么问题?开关是否异步工作?

if 语句将函数放在块中 {},限制范围。

{
  function test() {
    console.log("one");
  }

  test();

}

function test() {
  console.log("two");
}

switch case 没有块分隔符。所以最后定义的 test() 函数被调用。

function test() {
  console.log("one");
}

test();

function test() {
  console.log("two");
}

不要在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 声明。

您的 if / else 变体起作用的唯一原因是因为这些块有自己的作用域。该功能只能在各自的 if / else 块中访问。