如何在switch语句中不预先存变量直接访问条件处函数的返回值
结论
原生JavaScript没有提供可以直接访问switch判断表达式返回值的内置语法,你想要的类似this的隐式调用方式不存在。
可行的替代方案
如果你只是不想在switch语句外部定义变量污染外层作用域,可以在switch的判断表达式内声明块级作用域变量,这个变量仅在switch块内部可访问,符合你不想“预先存储”的需求:
switch (const res = doSomething()) { case "1": return 1; case "2": return 2; default: console.log(res); // 可以正常拿到doSomething的返回值 }
如果你完全不想声明任何变量,只有当doSomething()是无副作用的纯函数(多次调用返回结果一致、不会修改外部状态)时,可以直接在default分支重复调用该函数:
switch (doSomething()) { case "1": return 1; case "2": return 2; default: console.log(doSomething()); }
注意:该方案不推荐通用场景使用,只要
doSomething存在副作用(比如调用时会计数、依赖随机值/时间戳等),两次调用得到的结果就会不一致,导致逻辑错误。
内容的提问来源于stack exchange,提问作者Ron Zano
相关产品推荐
相关产品推荐

