Frontend
[리펙토링] function안에 function 리턴값
두바이유
2021. 11. 2. 14:42
세션을 확인하는 기능을 2군데이상 쓰이기때문에 function으로 만들었다.
//seeker 탐색기 여부확인
function findSeekerSession() {
let noSeekerSession = document.querySelector('#noSession')
if (noSeekerSession) {
alert('메뉴 우측상단에 : 아이콘을 클릭하여 탐색기를 선택해주세요')
return false
}
}
funcion openModal1(){
findSeekerSession()
alert('1')
}
funcion openModal2(){
findSeekerSession()
alert('2')
}
문제가 발생하였는데 찾는세션이 없을경우 멈춰야하는데 쭉이동하여 alert('1')이나 alert('2')가 열렸다.
생각해보니 function안에 function이 있는구조이기때문에
return false는 내부 function만 해당하게되서 외부 function은 멈추지않고 진행한것이다.
해결1 + 문제발생
외부 function에 if문으로 감싸서 return false를 한번더 감아주어 문제를 해결하려하였다.
return false가 작동하여 alert('1')이나 alert('2')는 열리지않았으나
만약 return true일경우 alert('1')이나 alert('2')가 열려야하는데 열리지않는 문제가 발생하였다.
funcion openModal1(){
if (!findSeekerSession()) {
return false
}
alert('1')
}
funcion openModal2(){
if (!findSeekerSession()) {
return false
}
alert('2')
}
해결2
funcion openModal1(){
if (findSeekerSession() == false) {
return false
}
alert('1')
}
funcion openModal2(){
if (findSeekerSession() === false) {
return false
}
alert('2')
}
!을 바꾸어 == false 혹은 === false으로 변경하니까 해결1의 문제가 해결되었다.
이유를 곰곰히 생각해보았는데 !는 function 자체가 있는지 없는지 여부를 따지는것이라서
return false와는 별개의 것으로 파악된다.
그러나 그러한 이유라면 애초에 해결1자체가 성립되지않아야하는데 ..
반응형