함수를 실행시키는데는 두 가지 방법이 있다.
그것은 간접적, 직접적 함수 실행이다.
function add() {
something = someNum + someOtherNum;
}
add() vs add
왜 이러한 두 가지 방법이 있는지를 이해해보자
보통, 이름으로 정의된 함수(예: add)를 호출할 때 괄호를 추가한다. (함수가 필요한 모든 매개변수가 괄호 안에 들어가거나 위의 예시처럼 매개변수가 필요하지 않은 경우 빈 괄호를 추가한다).
=> add() --> 직접적 함수 실행
이게 바로 코드의 함수를 실행하는 방법이며 JavaScript는 이 문장이 나올 때마다 함수의 코드를 실행한다.
하지만 가끔은, 함수를 바로 실행하고 싶지 않을 때가 있다. JavaScript에 미래의 어느 시점에(예: 일부 이벤트가 발생할 때) 어떤 기능이 실행되길 원할 수도 있다.
이 경우에 함수를 직접 호출하는 대신 JavaScript에 함수 이름을 제공한다.
=> someButton.addEventListener('click', add);
이 스니펫은 JavaScript에게 이렇게 지시합니다. "이 버튼이 클릭되면 add를 실행해.".
스니펫(snippet)은 재사용 가능한 소스 코드, 기계어, 텍스트의 작은 부분을 일컫는 프로그래밍 용어
someButton.addEventListener('click', add()); 는 이 경우에는 오답이 될 것이다.
그 이유는 JavaScript는 스크립트를 분석/실행하고 이벤트 리스너를 등록하는 즉시 add를 실행하기 때문이다다 - 괄호를 추가했기 때문
아래와 같이 코드의 어딘가에 add를 추가하는 것만으로는 아무 효과가 없다.
let someVar = 5;
add
alert('Do something else...');
Why?
왜냐하면 함수의 이름만 있고 JavaScript에 다른 정보를 제공하지 않았기 때문이다. 그러면 JavaScript는 그 함수 이름으로 무엇을 해야 하는지 알지 못해서("클릭이 발생할 때 실행해야 하나요? 어느 정도의 시간이 지나면? 모르겠습니다...") 그리고 결과적으로 JavaScript는 이 문장을 무시하게 된다.