Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

민규의 개발블로그

자바스크립트 함수스코프, 블록 스코프 본문

카테고리 없음

자바스크립트 함수스코프, 블록 스코프

규몽 2020. 11. 21. 02:04


함수 기반 스코프

 

함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없다. 즉, 함수 내부에서 선언한 변수는 지역 변수이며 함수 외부에서 선언한 변수는 모두 전역 변수이다.

 

- 스코프 전체에서 변수가 살아있음(전역 변수 남발)

- var 키워드 생략 허용

- 변수 중복 선언 허용

 

함수 선언문과 함수 표현식의 차이

 

함수 이름이 어디의 확인자로 묶이느냐와 관련 

function이라는 단어가 구문 시작 위치에 있다면 함수 선언문이고, 다른 경우는 함수 표현식

 

함수 표현식 즉시 호출하는법

 

( )로 함수를 감싸면 함수를 표현식으로 바뀨눈대, (function foo( ) { } ) ( ) 처럼 마지막에 또 다른 ( )를 붙이면 함수를 실행할 수 있다. 함수를 둘러싼 첫 번째 ( )는 함수를 표현식으로 바꾸고, 두 번째( )는 함수를 실행시킨다.

이를 약어로 IIFE라 한다. (즉시, 호출, 함수, 표현식)

 

(funtion foo(){
var a =3;
console.log(a); // 3
})();
view raw 1.js hosted with ❤ by GitHub

 


블록 스코프

대부분의 프로그래밍 언어는 블록 레벨 스코프(Block-level scope)를 따르지만 자바스크립트는 함수 기반 스코프(Function-level scope)를 따른다.

 

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

 

let

 

ES6는 블록 레벨 스코프를 따르는 변수를 선언하기 위해 let 키워드를 제공한다.

 

var과의 차이점

  • 블록 스코프 기능
  • 변수 중복 선언 불가
  • 호이스팅 불가

 

var foo = 123; // 전역 변수
let voo = 321; // 전역변수
console.log(foo); // 123
console.log(voo); // 321
{
var foo = 456; // 전역 변수
let zoo = 678; // 지역 변수
}
console.log(foo); // 456
console.log(zoo); Reference error
view raw 1.js hosted with ❤ by GitHub

 

const

 

ES6에서는 키워드 let과 함께 const도 추가됐다. const 역시 블록 스코프를 생성하지만, 선언된 값은 고정된다(상수).

 

 

{
const a =3;
const a =4';
}
console.log(a); // SyntaxError
view raw 1.js hosted with ❤ by GitHub
Comments