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
块中访问。
切换语句代码:
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
块中访问。