[JS]자바스크립트 요점 정리

박두팔이·2024년 10월 1일
0

자바스크립트

목록 보기
7/9

자바스크립트 특징

1. 호이스팅

var a = 1
var name = "euni"
var age = 10
console.log(age)

위와 같은 코드를 실행한다고 가정할 때,

01. 코드가 실행되기 전에 자바스크립트 엔진은 선언된 변수를 확인한다.

02. 선언된 변수와 함수를 가져가 메모리에 기억한다.

03. 함수를 호출하면 메모리에 기억해둔 함수를 가져와 사용하는데, 이를 호이스팅이라고 한다.


호이스팅?

함수가 실행되기 전에 안에있는 변수들을 범위의 최 상단으로 끌어올리는 것을 호이스팅이라고 한다.

// 문제되지 않는 코드 예시
var a = 1
console.log(a)
// 실행결과
1

// 호이스팅의 개념이 적용된 코드 예시
console.log(a) // a를 선언하기 전에 변수 a를 사용하고 있음
var a = 1
console.log(a)
// 실행결과 
undefined
1

코드는 항상 Top to bottom 이기 때문에 위에서 아래로 실행되지만, js의 경우 호이스팅으로 처리되기 때문에 a를 선언하기 전에 a변수를 사용하여도 에러가 나지 않는것을 볼 수 있다.

undefined

이와같이 동작하는 이유는,

01. 자바스크립트에서 호이스팅을 하면 변수의 선언과 초기화(undefined으로)를 같이 시킨다.

02. 이후 값 할당은 나중에 한다는 특징이 있다.


2. var의 문제로 let이 등장했다. const는 상수개념이라 설명은 생략!

변수 선언을 할당 뒤에 해도 자바스크립트는 허용함

console.log(a) // undefined
a = 1 // 선언 안함
var a // 선언을 할당 뒤에 함
console.log(a) // 1

전역변수와 지역변수의 개념이 확실하지 않음

  • 전역변수: 블락 밖에서 선언을 한 어디서든 쓰일 수 있는 변수
  • 지역변수: 블락{} 안에서 선언된 변수, 블락안에서만 쓸 수 있음
// var로 선언된 b가 지역변수로 적용됨
var a = 2
function foo() {
	var b = 1
}

console.log(b) // referenceError: b is not defined at ...(생략)
// var로 선언된 전역변수로 적용됨
for(var i=1; i<5; i++) {
	console.log(i) // 1,2,3,4..(순서대로 출력)
}
console.log(i) // 지역변수를 전역에서 사용해도 에러가 나지 않음

var같은 경우 함수만 지역변수로 호이스팅이 되고 나머지는 모두 다 전역변수로 올린다는 특징이 있다.

또한가지, 말도 안되는 상황은 중복에서 같은 변수명을 사용했을 때이다.

중복된 변수명을 사용해도 error가 나지 않고 변수의 value를 변경해버리는 문제가 있음

var a = 1
console.log(a) // 1
var a = 2
console.log(a) // 2

이에 따라, 새로운 변수 사용방법이 등장하게 된다.
자바스크립트는 var를 지양하고 let을 사용하도록 권장한다.

3. let도 호이스팅이 되지만 Temporal Death Zone(TDZ)라는 개념으로 변수에 대한 값이 선언되기 전까진 변수 값에 접근할 수 없다.

console.log(a) // a라는 변수를 자바스크립트 엔진이 알고 있음
let a = 1 // 그러나 a 선언문이 나오기 전까지는 a에 접근하지 않는다.
console.log(a) 

// 결과
Cannot access 'a' before initialization

결론: let을 써라~


4. dynamic Typing이 가능해서 자유도와 유연성이 높다는 단점이 있음

// 예시로
5-'3'

과 같은 코드가 실행가능함
profile
기억을 위한 기록 :>

0개의 댓글