함수 선언과 스코프체이닝

Jun·2022년 4월 9일
0

함수선언과 함수 호출

화살표 함수와 일반 함수의 차이

Const add =(a,b)=> a+b;

Function calculator(func,a,b){
	return func(a,b)
}

함수 선언와 함수 호출을 구분할 줄 알아야한다.
함수는 함수호출 괄호와 함께 작성하는 것 은 함수 호출이고 리턴값이 반환된다.
함수는 함수 호출스택(콜스택)으로 구동이된다. 호출 스택은 호출이 되어질때마다 스택에 쌓인다.
호출 스택에 대한 분석 구글에서 debugger 을 사용하여 callStack을 직접적으로 확인하여 관찰할 수 있다.

스코프 체인

스코프 체인은 함수에서 접근할 수 있는 변수의 범위들을 스코프 체인이라고 한다.
함수안에 함수를 호출 할수 없는데 함수선언문에 접근 불가능하기 때문이다. 그럼 왜 불가능 한가? 이런 기준과 증명이 바로 스코프 체인이해준다.
참고) 호출스택(콜스택)은 호출할때만 쌓이고 스코프 체인은 선언들만 쌓인다!

최상위 부모가 anonymous (전역 스코프) 라고 하자. 호출되는 함수들의 상위 부모를 계속해서 따라가보면 결국엔 최상위부모인 anonymous를 만나게된다.

예를들자

function a(){

	console.log(‘a’);

	b();

}

라고하면 a함수안에 함수 b가 호출되었다. b의 스포프 체인( 상위 부모 함수)는 function a 이고 function a 의 상위 부모 함수는 anonymous 가 된다.

Function a(){

	console.log(‘a’);


	function b(){
	
		console.log(‘b’);
		c();					
	
	}

}


Function c(){
	
	b();
	console.log(‘c’);
}

이 예제에서 함수 c안에서 곧바로 함수 b를 호출할 수 있을까??
당연히 안된다. 그럼 왜안될까? 증명을 해봐라.
증명 할 수 있는 것이 바로 스코프 체인이라고 했다. 그럼 증명해보자.

함수 b의 상위 선언 함수는 함수 a 이다.

B -> A -> 전역스코프

C-> 전역스코프

B 함수는 전역스코프안에 a함수안에 b함수가 들어가있다. 근데 c는 전역스코프 안에만 존재한다.

그러기때문에 c는 전역스코프안에있는 a 는 접근가능하지만 한단계 더 들어간 b함수에는 접근이 불가능하다.

렉시컬 스코프… 한번 코딩되어있으면 스코프 관계는 절대 변경되지 않는다. 언어적으로 체이닝관계를 구성할 수 있는 것을 말한다.
전역변수에서 선언한 변수를 블록안에서도 똑같은 변수를 선언할 수 있는 이유가. 스코프 체인에 서로 중복, 겹치지 않기 때문에 가능하다.

스코프는 함수 안에서부터 전역변수까지 순차적으로 변수를 탐색해 나아가는데 찾는순간 부모함수까지 가지않고 탐색이 종료된다.

0개의 댓글