Switch语句无法正常工作 - Javascript

时间:2018-01-31 07:58:19

标签: javascript if-statement switch-statement console.log

切换语句代码:

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语句有什么问题?交换机是否作为异步工作?

2 个答案:

答案 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块中访问。