일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 컴퓨터구조
- 선형 큐
- 큐
- JS
- 덱
- 이진검색
- 스택
- 복사
- Selector
- 티스토리챌린지
- MySQL
- 컴퓨터 네트워크
- Git
- 컴파일
- math
- 폰노이만 아키텍쳐
- OSI7계층
- 컴퓨터네트워크
- SQL
- Stack
- 프로토콜
- JavaScript
- 자바
- 오블완
- combinators
- object
- Java
- Algorithm
- OOP
- 선택자
- Today
- Total
Hello WeonHyeok!
[JS] const,let 본문
JavaScript에서는 변수를 선언할 때 const, let을 사용해 변수를 선언한다.
(Var)
ES6 이전에는 var로만 변수를 선언했었다. 이 var의 문제점이 있어서 const와 let이 탄생한 것이다.
var의 특징
Scope of variable
var로 선언한 변수는 범위는 전역범위 혹은 함수범위(지역변수)로 지정된다.
아래 예시 코드를 보면 더 이해가 쉽다.
var variable = "Hello?"; //이 변수는 전역변수
function actions() {
var localVariable = "World"; //이 변수는 지역변수
}
console.log(variable); //Hello? 출력
console.log(localVariable); //error 지역변수 호출 ;ocalVariable isn't defined.
위 코드처럼 var는 함수 안에서든 함수 밖 외부에서든 변수 선언이 가능하며, 전역변수와 지역변수를 구분한다.
Hoisting
호이스팅은 함수선언, 변수선언이 맨 위로 이동되는 자바스크립트의 메커니즘이다.
console.log(consolePrint);
var consolePrint = "ok"; //undefined 출력
다른 언어라면 consolePrint 변수는 console.log 전에 선언된 것이므로 아예 프로그램이 작동이 안 되는 코드이다.
하지만 JS에서는 호이스팅을 통해 변수 선언 전, 변수 호출이 가능한 것이다.
좋아 보이지만, 호이스팅이 가능한 것은 매우 안 좋은 문제점이다.
var의 취약점
1. 선언 중복가능
같은 이름의 변수를 중복 선언해도 프로그램이 동작이 된다.
var twinsVar = 10;
var twinsVar = 20;
console.log(twinsVar); //20출력
중복으로 선언된 변수가 프로그램에 큰 문제를 일으킬 수도 있다.
2. Hoisting 가능
var는 호이스팅이 가능하다.
호이스팅은 코드의 가독성과 유지보수에 안 좋은 영향을 끼친다. 가급적 호이스팅이 일어나지 않도록 프로그래밍해야 한다.
호이스팅을 모르더라도 가급적 변수, 함수는 상단부에 선언하고 호출은 선언 후 호출하는 게 좋다.
위와 같은 이유 말고도 많은 단점이 있어서 ES6부터 새로운 변수 선언이 도입되었다.
let과 const이다.
let과 const
let은 기존의 var의 대체하는 "변수" 역할을 하며, const는 "상수" 역할을 한다.
var의 문제점 중 중복선언이 있었는데, let은 중복선언을 하면 오류가 난다.
let twins = "G";
let twins = "G2";
console.log(twins); //SyntaxError 'twins' has already been declared.
구문오류: 'twins' 변수는 이미 선언되었다.
많은 컴퓨터 언어에서는 상수를 지원한다.
상수의 역할은 선언한 값을 다시 재할당(수정, 변경)이 안된다.
let과 마찬가지로 중복선언 역시 안된다. 또 const는 선언과 동시에 값을 할당해야 한다.
const a;
console.log(a); //SyntaxError const declaration.
const 선언 후 바로 값을 할당 안 해서 에러.
const a=100000;
a = 51;
console.log(a); //Type error
const는 상수이다. 값을 변경 못하는데 재할당(변경)해서 에러.
Hoisting 불가능
console.log(hoistingCheck1);
console.log(hoistingCheck2);
const hoistingCheck1 = 50;
let hoistingCheck2;
const와 let은 var와 달리 hoising이 불가능하다. let과 const를 사용하면, 유지보수 측면과 코드가 안 꼬일 수 있다.
const는 재할당이 불가능한 상수이다. 하지만 const로 선언한 배열이나 객체는 그 내부 속성이나 요소를 수정할 수 있다.
const obj={
userName:"gil dong",
}
obj.userName = "Hong gil dong";
console.log(obj); //길동이 홍길동으로 수정됨.
출력 결과 "gil dong"에서 "Hong gil dong"으로 재할당됨. 이처럼 cosnt로 선언된 객체나 배열의 경우 그 객체, 배열 자체는 재할당 못하지만, 내부 속성이나 요소는 속성 할 수 있다.
obj를 수정한 게 아니라, obj.userName 즉, 객체 안에 있는 userName을 수정한 것이다.
const arr = [1,2,3];
arr.push(4);
console.log(arr); //[1,2,3,4] 출력
arr = [8,76,5,1];
console.log(arr); //TypeError 배열 자체를 재할당은 못함. 재할당 할 시 let으로 선언.
let arr2 = [1,5];
arr2 = [5];
console.log(arr2); //[5] 출력
배열 역시 const로 배열을 선언하면 배열 안에 있는 요소는 재할당 할 수 있고, 배열에 요소를 추가할 수도 있다.
하지만, 배열 자체를 재할당하는 것은 불가능하며, 배열을 재할당할 시 let으로 선언해야 한다.
대표사진 출처
'Javascript' 카테고리의 다른 글
[JS] JS 내장객체 Math (3) | 2024.07.14 |
---|---|
[JS] 반응형 헤더, 햄버거 메뉴 (0) | 2024.07.13 |
[JS] D-day 실시간 계산 (0) | 2024.07.07 |