변수실습

지환·2024년 6월 10일
0

자바스크립트

목록 보기
14/30

변수 실습


// var는 한번 선언된 변수를 다시 선언 가능

var name = 'mike';
console.log(name); // mike

var name = 'jihwan';
console.log(name);//jihwan
  • 같은 상황에서 let은 오류발생
let name = 'jane';
console.log(name); /// jane

let name = 'jihwan';
console.log(name); // error!

var는 선언하기 전에 사용 가능

console.log(name); // undefined
var name = 'mike';
  • var로 선언한 모든 변수는 코드가 실제로 이동하진 않지만, 최상위로 끌어올려진것처럼 동작 = 호이스팅 발생

  • 할당은 호이스팅 되지 않는다.

같은 상황에서 let은 오류

  • let과 const는 호이스팅 되지 않는걸까? No!

  • Temporal Dead Zone (TDZ)때문 TDZ 영역에 있는 변수들은 사용할 수 없음

  • 할당을 하기 전에는 사용할수없다.

// 문제가 발생하지 않는 코드
let age = 30;
function showAge() {
    console.log(age);
}
showAge();

// 문제 발생 코드
let age = 30;
function showAge() {
    console.log(age); // TDZ
    let age = 20; // 호이스팅 발생
}
showAge();
  • 변수의 생성과정
  1. 선언 단계

  2. 초기화 단계

  3. 할당 단계

var

  • 선언 및 초기화 단계 (초기화 undefined를 할당해주는 단계)

  • 할당 단계

  • var는 함수스코프 (함수 내에서 선언된 변수만 그 지역변수이다.)

let

  • 선언 단계

  • 초기화 단계

  • 할당 단계

-> 호이스팅 되며 선언 단계가 이루어지지만, 초기화 단계는 코드에 도달 했을 때 된다.

-> 그렇기 때문에 레퍼런스 에러 발생

const

  • 선언 + 초기화 + 할당 해야함.

let과 var는 선언만 해두고 나중에 할당허용


const gender; //error발생 바로 할당하지 않아서.

gender = 'male';

스코프

  • 블록 스코프는 모든 코드 블럭 내에서 선언도니 변수는 코드 블록 내에서만 유효하다.

  • 코드 블록 내에서만 유효하다.

  • 즉 코드 블록 내부에서 선언한 변수는 지역 변수이다.

  • if문 안에서 var로 선언한 변수는 if문 밖에서도 사용 가능 하다.

  • let과 const는 중괄호 안에서만 사용가능하다.{블록스코프}

const age = 30;
if (age > 15){
    var txt = '성인';
}
console.log(txt); // 성인
function add(num1,num2){
    var result = num1 + num2;
}
add(2,3);
console.log(result); 
//var도 함수 내에서 선언되면 함수 밖에서 사용못함
//유일하게 벗어날 수 없는 스코프가 함수이다.
profile
아는만큼보인다.

0개의 댓글