콘솔에 찍힐 b 값을 예상해보고, 어디에서 선언된 “b”가 몇번째 라인에서 호출한 console.log에 찍혔는지, 왜 그런지 설명해보세요. 주석을 풀어보고 오류가 난다면 왜 오류가 나는 지 설명하고 오류를 수정해보세요.
let b = 1; // b에 1이라는 값이 주어졌다.
function hi () { //함수 hi는 const a=1; , let b = 100; b++이라는 매개 변수를 가집니다. 즉 값으로 함수에 전달됩니다.
const a = 1; // let 상수는 키워드 를 사용하여 선언된 변수와 마찬가지로 블록 범위 입니다.
상수 값은 재할당을 통해(즉, 대입 연산자를 사용하여 ) 변경할 수 없으며, 다시 선언할 수 없습니다.
let b = 100; // 하지만 b에 이미 1이라는 값을 선언하였기에 b는 아직 1이다.
b++; // let을 사용하지 않은 b 객체로 후위 증가 연산자가 사용되므로 (1씩 증가) b를 증가를 시켜 function 밖에 있는 b는 101이 되었다.
console.log(a,b); // 1 (function안의 b는 불변된 1의 값을 가지고 있기 때문에 아직 b는 1이고 a도 1이기 때문에 둘다 1을 찍어준다. )
}
//console.log(a); // const 변수를 function블록 내부에서 선언했다면, 해당 선언된 블록 내부에서만 접근이 가능하며, 블록 이외의 영역에서는 접근할 수 없다. 접근 시 아래와 같은 에러가 발생한다.
console.log(b); // 1 101 ( b의 값은 function 바깥쪽이랑 안쪽 두개 다 값을 가져와서 그런거 같다.)
hi();
console.log(b); 1 (hi라는 함수의 b를 소환하여 1이 됨)
두 값이 다른 이유를 설명해 보세요
1 == "1"; // 숫자 1이랑 문자로된 1이지만 ==의 경우에는 1이 맞기 때문에 true로 표시해준다.
1 === "1"; // 하지만 === 연산자는 타입을 변환하지 않으므로 == 연산자에 비해 비교하는 방식이 엄격하므로 숫자와 문자의 차이가 있어 false로 표시해준다.