본문 바로가기

JavaScript

변수 선언

var, let, const

var로 선언된 변수의 scope

var 를 쓰지 않으면 전역변수가 된다. var 를 전역공간에 쓰면 전역변수다. var 를 함수안에서 사용하면 함수안에서만 유효하다 (함수단위의 변수 유효범위를 갖는 것)

var name = 'var variable';
	function test() {
  	  var testName = 'my test';
	  console.log(name); //var variable
	  console.log(homeName); //my test
}
test();	

 

블럭단위의 scope

ES2016에서는 const나 let 키워드를 사용해서 변수를 선언하면 Block({})단위의 scope를 만들 수 있다.

Block단위로 사용할때는 const나 let을 사용하는 것을 권장. 

function test() {
  var testName = 'block scope';
  for (let i = 0; i<1000; i++){}
  console.log(i); //i is not defined
}

 

 

const

const로 선언된 변수는 재선언과 재할당을 할 수 없다. let 은 재선언은 안되지만 재할당은 가능하다.

function test() {
  const testName = 'my const';
  testName = 'your const';
}

test() //TypeError: Assignment to constant variable.

 

const를 사용한다고 수정할수 없음을 의미하는 것은 아니다. const를 사용하더라도 배열과 오브젝트의 값을 변경하는 것은 가능.

function test() {
  const list = ['ruby', 'tiber', 'kkingkang'];
  list.push('tiger');
  return list;
}
test() //["ruby", "tiber", "kkingkang", "tiger"]

var, const, let  사용전략

const를 먼저 사용하자. 재할당해야 하는 경우가 생기면 let을 사용한다. var는 block scope를 지원하지 않음으로 사용하지 않는다.

scope chain

변수를 찾기 위해서, 지역스코프(안쪽함수)에서 전역스코프까지 단계적으로 올라가면서 찾는다. 이를 scope chain이라고 한다.

const name = 'scope chain';
function test() {
  const testName = 'my test';
  function printName() {
     const nickName = 'KimJye';
     console.log(nickName); 	// KimJye
     console.log(testName); 	// my teset
     console.log(name); 	//scope chain
  }
  printName();

}
test();

'JavaScript' 카테고리의 다른 글

함수  (0) 2019.07.22
객체탐색과 배열탐색  (0) 2019.07.22
jest  (0) 2019.07.22
Promise  (0) 2019.07.22
generator function  (0) 2019.07.22