2023-01-31 화요일

·2023년 1월 31일
0

Today I Learned

목록 보기
63/114
post-thumbnail

✏️ 무엇을 배웠나


1. 헷갈리는 논리 연산자 복습

로직을 짤 때 논리 연산자를 사용할 경우에 헷갈려서 자주 찾아봤었다. 보완해줄 필요가 있어서 오늘 다시 한 번 공부했다. 로그인/회원가입 유효검 검사 로직을 짤 때 논리 연산자의 리턴값이 왜 이렇게 나오는지 몰랐었는데 뒤늦게 보완.

// 논리 연산자

const d = 1
const e = '하이'
const f = false

// && 연산자는 양쪽 모두 truthy하면 결과물도 truthy다
// 모든 값이 참이면 마지막 값이 반환된다
const result = d && e
console.log(result)

const result2 = e && f
console.log(result2)

const andRes = d && e
console.log(andRes) // 가장 마지막 값에 있는 e의 값인 '하이'

// || 연산자는 하나라도 truthy하면 결과물도 truthy다
// 하나라도 참이면 되므로, 순서 상 가장 먼저 참인 것이 값으로 반환된다.

const result3 = d || e
console.log(result3)

const result4 = e || f
console.log(result4)

const orRes = e || f
console.log(orRes) // true 중 첫번째인 e의 값인 '하이'`og(orRes) // true 중 첫번째인 e의 값인 '하이

2. 호이스팅 관련 보충

호이스팅도 잘못 알고 있던 점이 있어 보충했다.

let과 const로 선언한 변수는 호이스팅이 안 되냐? 아니다. var와 마찬가지로 호이스팅이 된다.

호이스팅은 변수와 함수에 관련해서 선언 전에 메모리 공간을 미리 할당하는 것을 말함.
즉, 선언과 초기화의 과정에서 선언 부분은 코드의 최상단으로 옮겨놓는 것과 같게 된다.

var의 경우에는 호이스팅 시 undefined로 초기화되는데,
let과 const의 경우에는 그렇지 않기 때문에 호이스팅이 일어나더라도 초기화 전에는 해당 값을 사용할 수 없다. 사용하려고 하면 referrence 에러가 뜬다. 호이스팅이 안 되는 것은 아니다.

호이스팅으로 인해서 변수나 함수를 사용하는 코드가 선언보다 앞서더라도 실행할 수 있는 것이다.
앞서 말한 것처러 let과 const으로 선언한 변수는 undefined 상태로 초기화가 되지 않기 때문에 에러가 뜨게 된다.

1) 함수 선언식의 경우

fn("ddddddd");

function fn(a){
  console.log('함수 실행', a); // '함수 실행' 'ddddddd'
};

2) 함수 표현식의 경우

호이스팅에 영향을 받지 않는다. 아마도 함수 자체가 변수이기 때문에.

fn2("ddddddd");

const fn2 = (a) => {
  console.log('함수 실행2', a); // ReferenceError: fn2 is not defined
};

3) 변수의 경우

function fn3(){
  console.log(b) // undefined
  console.log(c) // ReferenceError: c is not defined
}

fn3();

var b = 10
let c = 20

🔎 더 알고 싶은 것 / 보완이 필요한 것


1. TDZ에 대해서 공부 ( let, const 호이스팅과 연관 )


🏷️ 오늘의 코멘트

프로젝트 끝나니까 긴장이 풀려서 피로감이 확 밀려온다

profile
⛰ 프론트엔드 개발 공부 블로그

0개의 댓글