본문 바로가기
갬발자의 프로그래밍/Javascript

스코프 결정 시점 과 함수레벨스코프

by 코라제이 2019. 12. 20.

함수 키워드를 만나게 되는 시점에서 스코프가 결정이 된다.

 

함수가 호출되는 시점에 함수 안의 영역에 있는 함수와 변수를 정적으로 사용할 수 있게 된다.

하지만 함수에서 var를 사용하지 않고 변수를 선언하게 된다면 이것은 전역 변수가 된다. 

var result = 1;

function foo(){
    result =2; 
}
foo(); 
console.log(result); //result 2 

이런 것을 방지하기 위해서 es5에서는 위해 use strict를 사용 (전역 변수 생성 시 선언을 해야 한다)

"use strict"
result = 1;

//에러 발생 Uncaught ReferenceError: result is not defined

, es6에서는 let, const 키워드를 사용한다

var foo = 1;
{
    var foo = 2; 
}
console.log(foo); //2 

let foo = 1;
{
    let foo = 2;
}
console.log(foo); // 1

var는 함수 단위의 스코프 이기때문에 블록 밖 변수에 영향을 미치지만,

let은 블록 레벨 스코프를 따르기 때문에 블록 밖 변수에 영향을 주지 못한다. 

const도 let과 같은 블록 단위 스코프이며 상수를 선언할 때 사용한다.

 

렉시컬 스코프란 함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 결정이 되는것을 말한다.

 

const x = 1;

function foo() {
  const x = 2;
  lexical();
}

function lexical() {
  console.log(x);
}

foo(); //1
lexical(); //1 

 

foo() lexical()는 전역에 선언되어있다. 그렇게때문에 1을 출력하는것이다.

'갬발자의 프로그래밍 > Javascript' 카테고리의 다른 글

prototype  (0) 2019.12.23
Execution Context  (0) 2019.12.23
Argument 처리 형태  (0) 2019.12.22
호이스팅  (0) 2019.12.20
function  (0) 2019.12.20

댓글