함수 키워드를 만나게 되는 시점에서 스코프가 결정이 된다.
함수가 호출되는 시점에 함수 안의 영역에 있는 함수와 변수를 정적으로 사용할 수 있게 된다.
하지만 함수에서 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 |
댓글