Let 은 새로운 변수로 할당이 가능하다
<script>
let global_scope = 'global'
{
let name = 'young'
console.log(name);
name = 'hi';
console.log(name);
console.log(global_scope)
}
</script>
괄호를 이용해서 블럭을 작성하면 밖에서 접근이 불가능하다.
console.log(name);
그러나 블록 바깥에서 작성한 코드는 global scope 라고 부르는데, 이는 항상 호출 가능하다.
console.log(global_scope)
예시는 다음과 같다.
이전에는 var를 사용했지만, let과 const로 나눠지며 더 세세하게 작업할 수 있어 사용하지 않는 추세다.
1.hoisting
hoisting은 어디에 선언을 했냐와 상관 없이, 제일 위로 선언문을 끌어올려주는 기능을 말한다.
<script>
age = 4; // 값 할당
var age; // 변수선언
console.log(age); // 콘솔로그에도 정상적으로 출력
</script>
Let은 선언 이전에 할당이 불가능하다.
로직상 안꼬이기 위해서라도 Var는 사용을 권하지 않는다.
<script>
age = 6;
let age1;
console.log(age1);
</script>
블록스코프를 무시한다. 의도적으로 숨겨둔 변수도 끄집어 내기 때문에
프로젝트가 커짐에 따라, 선언하지도 않은 값이 할당되는 경우가 생기기도했다.
<script>
{
age2 = 7;
var age2;
}
console.log(age2);
</script>
보안적으로 좋음,
const // immutable
let // mutable
false : 0, null, undefined, NaN, ''
true : any other value
Null 과 undefined는 비슷해보이지만 다르다.
<script>
let nothing = null; // 값이 비어있는 상태, 즉, 너는 비어있어!
console.log(`value: ${nothing}, type: ${typeof nothing}`);
let x; // 값이 정해지지 않은 상태, 너는 아무것도 아니야!
console.log(`value: ${x}, type: ${typeof x}`);
</script>
변수를 선언할때, 어떤 타입인지 선언하지 않고, 프로그램이 동작할때 값에 따라서 타입이 변경될 수 있다.
<script>
let text = 'hellp';
console.log(`value: ${text}, type: ${typeof text}`); //데이터타입 스트링
text = 1;
console.log(`value: ${text}, type: ${typeof text}`); //데이터타입이 넘버로 바뀜
text = '7' + 6;
console.log(`value: ${text}, type: ${typeof text}`); // 6을 스트링으로 다이나믹하게 바꿔서 스트링으로 적용된 모습이다 값은 76이 출력
text = '6' / '3'
console.log(`value: ${text}, type: ${typeof text}`); // 설령 스트링으로 변수 할당을해줘도, 연산을 할 수 있다 판단하면, 스스로 변환해서 넘버 타입이 출력
</script>
자바스크립트는 런타임에서 타입이 정해지기 때문에, 에러가 가장 많이 발생하는 요소다.
예를 들어, 스트링인줄 알고 인덱싱 함수 charAt()을 불러왔는데, 숫자 타입으로 기재돼 있다면 에러가 발생한다.
그래서 데이터타입을 함께 기재하는 타입스크립트가 나타났다.