선언적 함수, 함수표현식

까만호랭·2023년 8월 4일
0

함수 객체

function func1() { // 선언적 함수
	document.write('난 fucn1 함수야<br>');
}	

const myfunc = func1;  // 함수 객체를 주는 것 (주소를 치환한 것과 비슷)
myfunc();
//함수가 실행될땐 ()를 사용하자!!!

이러한 행위를 '함수 객체를 준다'라고 표현

선언적 함수 들어가기 전 hoisting 개념

밑에서 함수가 선언되기 전에 위에서 이미 함수가 선언되는 것이다.
이때 let 말고, var로 선언을 밑에서 해야 위에서 선언이 가능!!!

var v1=10;  // hoisting O
let v2=20;  // hoisting X

선언적 함수

script 실행 전 준비단계에서 전역으로 선언되며 hoisting도 된다!

function func4() {  // 선언적 함수 : script 실행 전 준비단계에서 전역으로 선언됨 : hoisting O
	document.write('<br>선언적 함수 수행 (처음부터 메모리가 확보됨)');
}
func4();

함수 표현식

실행흐름이 해당 함수에 도달했을 때 함수를 실행

//sbs(); // 에러 : 선언 후 실행할 수 있음(선언하기 전 호출 안돼!!!!!)
let sbs = function() {  // 함수 표현식 : 실행흐름이 해당 함수에 도달했을 때 함수를 실행
	document.write('<br>익명 함수 수행 (휘발성 ,단발성, 동적)');
}
sbs();

sbs는 let을 앞에 썼기 때문에 hoisting이 되지 않는다.
때문에 앞에서 출력되지 못함!!!
위에서 sbs();를 실행한다면

다음과 같은 에러가 발생하니 주의하자!!

내부함수, 외부함수

function func5() {
	document.write('<br>func5 수행 성공')
	function fu1() {
		document.write('<br>fu1 수행');
	}
	function fu2() {
		document.write('<br>fu2 수행');
	}
	fu1();
	fu2();
}
func5();
//fu1();  // 내부함수니 안에서 해야함 밖에선 xxx

fu1()과 fu2()는 func5()의 내부 함수이니 바깥에선 사용할 수 없다.

profile
남들과 함께 발자국을 남기는 까만호랭

0개의 댓글