변수

y0ung·2020년 11월 18일
0

JavaScript

목록 보기
2/20
post-thumbnail

Variable:변수

프로그램에 사용되는 데이터를 일정 기간 동안 기억하여 필요한 때에 다시 사용하기 위해 데이터에 고유의 이름인 식별자를 명시한 것.

변수명변수값
변수에 명시한 고유한 식별자변수로 참조할 수 있는 데이터

변수 참고


function-scoped

var

  • es6이전 계속 사용해봤던 방식
  • 재 할당이 가능하다.(중복선언이 허용된다)
  • 이제는 잘 사용하지 않는다.(2020년 기준으로)
var  foo  =  123;  // 전역 변수  
console.log(foo);  // 123  
{  
  var  foo  =  456;  // 전역 변수  
}  
console.log(foo);  // 456

함수 레벨 스코프(Function-level scope)
함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없다. 즉, 함수 내부에서 선언한 변수는 지역 변수이며 함수 외부에서 선언한 변수는 모두 전역 변수이다.

Block Scope

letconst변수 재 선언이 불가능하다.

let

  • var 대신 사용되는 변수이다.
  • 값을 변경할수 있다.
  • 선언한후에 나중에 값을 할당할수 있다.
let foo = 123;  // 전역 변수  
{  
  let foo = 456;  // 지역 변수  
  let bar = 456;  // 지역 변수  
}
console.log(foo);  // 123  
console.log(bar);  // ReferenceError: bar is not defined

코드 블록 내에 선언된 변수 foo는 전역에서 선언된 변수 foo와는 다른 별개의 변수이다.따라서 전역에서는 변수 bar를 참조 할수 없다.

블록 레벨 스코프(Block-level scope)
: 모든 코드 블록(함수, if,for,while, try/catch등) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조 할수 없다. 즉, 코드 블록 내부에서 선언한 변수는 지역 변수 이다.

const

  • 내용을 변경할수 없다.
  • 선언과 동시에 값을 할당해야 한다.
const name = "gayoung";

name = "nayoung";  -> error

하지만 완벽하게 변수를 보호 할수 있는 것은 아니다

object일 경우에는 변경 가능하다.

const person =  {
 name:  "gayoung",
} 

person.name="hayoung"

var,const, let 참조

blockscope_버블
{}변수들이 접근이 가능한지 아닌지

var 대신 let 을 써야 하는가?

예시1

var

console.log(myName);

var myName = "ga young"
  • undefined 결과가 나온다.
  • js 는 위에서 아래로 코드를 실행한다.
  • 버그인지 아닌지 헷갈릴수가 있다.

let

console.log(myName);

let myName = "ga young";
  • 경고를 확실하게 해준다.

hoisting
JS 가 프로그램을 실행하기 전에 어딘가로 이동을 시킨다.
(뭐든지 간에 제일 위로 올려준다.)
let을 사용한다면 정의하기 전에 부를때 무조건 에러를 출력해 준다.


예시2

var

if(true) {
  var hello = "hi"
}

console.log(hello);
// hi
  • var 는 block scope를 가지지 않고 function scope 를 가져서 결과를 보여준다.
  • 에러를 확인 할수 없어서 좋은것이 아니다.

let

if(true) {
  let hello = "hi"
}

console.log(hello);
// 에러를 도출해준다.
  • block 밖에서 호출되었으므로 결과 값이 나오지 않는다.

대신 한번 호출을 한 후에는 사용 할수 있다.

let hello;

if(true){
 hello = "lallala"
}

console.log(hello) // lallala
profile
어제보다는 오늘 더 나은

0개의 댓글