September 24, 2020
호이스트 : 끌어올리다
무엇을 끌어올리는 것인가? => 변수 ‘선언’, 함수 ‘선언’을 끌어올린다.
할당은 해당 사항이 아니다.
예전에는 기명 함수표현식을 쓰는 이점이 있었지만, 최근 브라우저들은 함수명이 비어있을 경우 자동으로 변수명을 네임프로퍼티에 할당하기 때문에 이제는 기명 함수표현식을 거의 사용하지 않고 있다.
‘선언한 함수를 변수에 할당한다’ - 이것이 함수표현식의 개념
함수 선언문과 함수 표현식의 차이는 ‘할당 여부’에 있다.
함수 선언문 대신 함수 표현식을 쓸 것을 권하고 있다. -> 안전하고 예측 가능한 소스를 위해
스코프 : 유효범위 (변수)
실행 컨텍스트 : 실행되는 코드 덩어리 (추상적 개념)
스코프는 ‘정의’될 때 결정된다!! 실행 컨텍스트는 ‘실행’될 때 생성된다!!
실행 컨텍스트에는 호이스팅, this 바인딩 등의 정보가 담긴다
var a = 1;
function outer() {
console.log(a); // 1
function inner() {
console.log(a); // undefined
var a = 3;
}
inner();
console.log(a); // 1
}
outer();
console.log(a); // 1
함수처럼 생겼는데 앞에 . 붙어있으면 메소드라고 생각하면 됨
함수와 메소드의 차이점은 ‘this를 바인딩 하느냐 안하느냐’의 문제. 메소드는 this를 바인딩 한다.
Something will call this function back sometime somehow.
‘제어권’을 넘겨준다. 맡긴다. (어떤 대상에게)
// 주기함수 호출 , 인자1 : 콜백함수 , 인자2 : 주기(ms)
setTinterval(function () {
console.log('1초마다 실행될 겁니다.');
}, 1000);
콜백을 어떤 타이밍에 어떤 형태로 호출하고 그 콜백에게 어떤 데이터를 매개변수를 넘겨줄지까지 foreach문 전체에서 자체적으로 규정하고 있다. 즉 콜백함수의 어떤인자들이 어떤 순서로 나열될지는 전적으로 foreach라는 메소드의 규칙을 따르게 된다. 따라서 사용자는 foreach가 정해놓은 규칙대로 콜백함수를 정의해야 한다.
콜백함수의 특징
주의! 콜백은 ‘함수’다.
인프런 Javascript 핵심 개념 알아보기 - JS Flow