티스토리 뷰
var는 구식자바스크립트의 잔재다.
대부분의 경우 let으로 대체가 가능하나 다른방식으로 동작이 되기 때문에 무작정 바꿀 수는 없는 노릇이다.
여전히 var로 만들어진 많은 코드들이 있기에 var와 let,const와의 차이점에 대해 알아야 한다.
-- Var / let, const 차이 (var의 특성)
1. var는 블록스코프가 없다, 함수스코프 이거나 전역스코프이다. (let과 const는 블록스코프)
블록 기준으로 생기지 않기 때문에 블록 밖에서 접근이 가능하다.
// let이나 const로 선언시 Uncaught ReferenceError: test is not defined
if (true) {
var test = true; // 'let' 대신 'var'를 사용했습니다.
}
alert(test); // true(if 문이 끝났어도 변수에 여전히 접근할 수 있음)
// 함수 안에서 선언시 함수스코프로 인식이 된다.
function test(){
var say = "hello";
console.log(say);
}
test(); // hello
console.log(say); // Uncaught ReferenceError: say is not defined
for문에서의 var는 반복문이 끝나도 접근이 가능하다.
for(var i =0; i < 10; i++){
// 어떤 코드
}
console.log(i) // 10
// let이나 const로 선언시 Uncaught ReferenceError: i is not defined
2. var는 변수의 중복 선언을 허용한다. (정확히 말하면 재할당이 허용된다)
// 선언은 처음 한 번만 발생하며, 이후 같은 이름의 변수가 발견되면 값을 재할당한다.(변수의 값만 업데이트)
var test = "allow"; // 선언, 할당
var test = "yes"; // 재할당
alert(user); // John
// let, const로 할경우
// Uncaught SyntaxError: Identifier 'test' has already been declared
3. var는 변수를 선언하기 전에 사용할 수 있다.
// var : undefined, 호이스팅되어 undefined, 초기값으로 할당됨
console.log(test1);
var test1;
// let : Uncaught ReferenceError: test2 is not defined
console.log(test2)
let test2;
// const : 선언과 할당을 동시에 해야함, Uncaught SyntaxError: Missing initializer in const declaration
// 위 아래 순서 바꾸면 Uncaught ReferenceError: test4 is not defined
const test2= "something";
console.log(test2)
함수스코프에서의 var
function sayWhat() {
var test; // 선언은 함수 시작 시 처리됨, 밑에 써도 호이스팅됨.
alert(test); // undefined
phrase = "What"; // 할당은 실행 흐름이 해당 코드에 도달했을 때 처리됨.
}
sayWhat();
4. 브라우저에서 let이나 const가 아닌 var로 선언한 전역 함수나 전역 변수는 전역 객체의 프로퍼티 된다.
var test = 5;
alert(window.test); // 5 (var로 선언한 변수는 전역 객체 window의 프로퍼티가 됨)
// let, const로 할 경우 undefined 나옴
-- let과 const와의 차이점
1. 변수 재할당 가능 여부
- let: 선언된 변수를 나중에 다시 할당할 수 있습니다. 즉, 변수의 값을 변경할 수 있습니다.
- const: 선언된 변수에는 재할당이 허용되지 않습니다. 한 번 할당된 값은 변경할 수 없습니다.
// let
let test = "냐옹";
test = "미야옹";
console.log(test); // 미야옹
// const
const test = "냐옹";
test = "미냐옹"; // Uncaught TypeError: Assignment to constant variable.
2. 선언 시점에서의 초기화:
- let: 변수를 선언할 때 초기값을 지정하지 않아도 됩니다. 초기화하지 않은 변수는 undefined로 초기화됩니다.
- const: 변수를 선언할 때 반드시 초기값을 지정해야 합니다. 초기화되지 않은 const 변수는 SyntaxError를 발생시킵니다
// let
let test;
console.log(test) // undefined
test = "냐옹";
console.log(test); // 냐옹
// const : 선언과 할당을 동시에 해야함
// Uncaught SyntaxError: Missing initializer in const declaration
const test2;
test2 = "something";
console.log(test2)
'개발공부 > Javascript' 카테고리의 다른 글
#기본기5_비교연산자 (==와 ===, null과 undefined) (0) | 2024.04.02 |
---|---|
#기본기4_문자열과 숫자의 결합 (0) | 2024.04.02 |
#기본기2_"use strict" (0) | 2024.04.02 |
#기본기1_자바스크립트의 문자열 변환 (1) | 2024.04.02 |
자바스크립트의 this란 무엇인가 (0) | 2023.12.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 에이블스쿨2일차
- 동등비교연산자
- universal rendering
- 배열내특정요소찾기
- cors위치
- react
- 함수형코딩
- 객체속성 추가 삭제
- 문자열
- .catch()
- null과 undefined
- 미들웨어위치
- 함수
- 조대곤교수님
- 프로토타입 체이닝
- 전역변수
- 비동기
- Props
- .finally()
- .then()
- unexpected character
- 태스크큐
- 리액트 이미지경로
- 대괄호표기법
- 머리아프다..
- unique "key" prop.
- promise
- JSX
- 객체리터럴
- 상속
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함