TIL_019_210217_HA

James·2021년 2월 19일
0

TILs

목록 보기
19/40

일종의 코딩테스트를 수행하며 깨달은 점

첫 째, 엘리먼트에 이벤트를 심을 때 인자가 있는 함수를 호출하려면?

자바스크립트에서 클릭이벤트를 엘리먼트에 심을 때
element.onclick = functionName;
이런식으로 우측에는 함수명만 작성해야 한다.

그런데 만약 클릭이벤트가 인자가 있는 함수를 실행하도록 하려면?

element.onclick = function(){
return functionName(x, y);
}

이렇게 무명함수의 리턴값으로 인자가 있는 함수를 호출하는 방법이 있다!

둘 째, 인자가 없는 함수를 호출하는 데 결과값이 매번 바뀌게 하려면?

Closure 함수를 떠올리면 된다!
function plusOne(){
let num = 0;
function addOne(){
return num++;
}
return addOne;
}
let fn = plusOne();
fn(); // 0. (만약 return num++가 아니라 num+=1면 처음부터 1이 될 것이다.
fn(); // 1

plusOne함수가 처음 호출되었을 때 클로저함수의 num이란 변수는 내부 선언이 없기 때문에 외부함수의 num=0값을 그대로 참조한 상태로 addOne함수가 할당된다. fn 변수는 addOne이란 클로저함수를 가지고 있기 때문에, fn() 실행 시 num을 리턴하게 되는데, addOne함수 내에는 num을 초기화시키는 할당 명령이 없기 때문에 num값은 계속해서 변하지 않고 누적연산 되어 간다.

! 알고 나면 간단한 건데 이 간단한 걸 깨닫는 데 매번 수십수백의 삽질이 요구된다..

profile
웹개발자 James 입니다.

0개의 댓글