함수의 구분 ES6 이전의 함수는 동일한 함수라도 다양한 형태로 호출할 수 있었다. var foo = function () { return 1; }; // 일반함수 foo(); // 1 // 생성자 함수로서 호출 new foo(); // foo {} // 메서드로서 호출 var obj = { foo: foo }; obj.foo(); // 1 ES6 이전의 모든 함수는 일반 함수로서 호출할 수 있는 것은 물론 생성자 함수로서 호출 가능 ES6 이전에 일반적으로 메서드라고 부르던 객체에 바인딩된 함수도 callable이면서 constructor이기 때문에 여러가지 형태로 호출할 수 있었다. --> 콜백함수도 마찬가지 그러나 위와 같이 함수를 여러 형태로 호출하게 되면 실수를 유발하고 성능상에도 좋지 않다. ..
this 키워드메서드의 경우 자신이 속한 객체를 가리키는 식별자를 참조 필요객체 리터럴 방식으로 생성한 객체의 경우 식별자를 통해 가능생성자 함수 방식으로 인스턴스를 생성하는 경우 인스턴스를 생성하기 전이므로 가리키는 식별자 확인 불가.이러한 상황에서 this라는 특수한 식별자를 통해서 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수를 사용this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조 가능this 바인딩은 함수 호출 방식에 의해 동적으로 결정(바인딩: 식별자와 값을 연결하는 과정)strict 모드의 일반함수 this는 undefined로 설정 → this가 일반적으로 객체의 메서드 내부 또는 생성자 함수 내부에서만 의미가 있는데, 일반함..
Object 생성자 함수 new 연산자와 함께 호출하여 객체를 생성하는 함수 생성자 함수 = new + function const person = new Object(); 인스턴스(instance) : 이때 생성된 객체 (person이 인스턴스) Object 외에도 String, Number, Boolean 등의 생성자 함수 제공 생성자 함수 객체 생성(빌트인) 생성자 // String 생성자 함수에 의한 String 객체 생성 const strObj = new String('Lee'); console.log(typeof strObj); // object console.log(strObj); // String {"Lee"} // Number 생성자 함수에 의한 Number 객체 생성 const numOb..
화살표 함수 VS 람다 함수 람다 함수 일반함수 기본형 (함수명 포함) function 함수명(){ 함수 로직 } function honey(){ console.log("hi"); } 익명함수 기본형 (일회용, 함수명 미포함) 익명함수는 메모리를 차지하지 않아 일회용으로 많이 사용된다. ⇒ 불필요한 메모리를 줄일 수 있다. 변수에 주로 담겨서 많이 사용된다. (리터럴 방식) function() { 함수 로직 } const honey = function (){ console.log("hi"); } 익명함수는 호이스팅 시 위로 올라가지 않고 익명 함수를 저장한 변수만 올라가게 된다. 일반 함수일 땐 정상적으로 호이스팅되어 에러 발생X 💡 호이스팅 : 인터프리터가 코드를 실행하기 전에 함수, 변수, 클래스 또..