👨‍💻
프론트엔드 기술 블로그
  • 프론트엔드 기술 저장소
  • React
    • React Hook
      • useRef
      • useReducer
      • useCallback
      • useMemo
      • useState
      • useEffect
      • useContext
      • Custom Hook
  • Javascript
    • 자바스크립트 기본
      • 데이터타입
      • 배열메소드
      • 타입 및 객체 체크
      • this
        • bind, call, apply
      • 프로토타입
      • 클로저
      • 스코프
      • 함수
      • 호이스팅
    • ECMAScript 6
      • let, const
      • 화살표 함수
      • 구조분해할당
      • Promise
      • 템플릿 문자열 표현식
      • 이터레이션
      • 클래스 (Class)
      • 심볼 (Symbol)
      • 제너레이터
  • 객체지향설계
    • 객체 지향 설계 원칙
      • 단일 책임 원칙
      • 개방 폐쇄 원칙
      • 리스코프 치환 원칙
      • 인터페이스 분리 원칙
      • 의존 역전 원칙
  • 브라우저와 자바스크립트
    • Document Object Model
      • DOM API
      • 이벤트 (Event)
  • Node.js
    • 번들러
      • webpack 설정
    • node.js 버전 관리
  • HTTP
    • HTTP 기본
      • 1. 웹과 네트워크 기본
        • 1.1 웹은 HTTP로 나타낸다.
        • 1.2 HTTP 탄생과 성장
        • 1.3 네트워크 기본 TCP/IP
        • 1.4 HTTP와 관계가 깊은 프로토콜 IP/TCP/DNS
        • 1.5 이름 해결 담당 DNS
        • 1.6 각각과 HTTP와의 관계
        • 1.7 URI와 URL
      • 2. 프로토콜 HTTP
        • 2.1 HTTP는 클라이언트와 서버간에 통신을 한다.
        • 2.2 리퀘스트와 리스폰스를 교환하여 성립
        • 2.3 상태를 유지하지 않는 프로토콜 HTTP
        • 2.4 리퀘스트 URI로 리소스 식별
        • 2.5 HTTP 메소드
        • 2.6 메소드 사용
        • 2.7 지속연결로 접속량 절약
        • 2.8 쿠키를 사용한 상태관리
      • 3. HTTP 정보는 HTTP 메시지에 있다.
        • 3.1 HTTP 메시지
        • 3.2 리퀘스트 메시지와 리스폰스 메시지 구조
        • 3.3 인코딩으로 전송 효율을 높이다.
        • 3.4 여러 데이터를 보내는 멀티파트
        • 3.5 일부분만 받는 레인지 리퀘스트
        • 3.6 최적의 콘텐츠를 돌려주는 콘텐츠 네고시에이션
      • 4. 결과를 전달하는 HTTP 상태코드
        • 4.1 상태코드는 서버로부터 리퀘스트 결과를 전달한다.
        • 4.2 2xx 성공
        • 4.3. 3xx 리다이렉트
        • 4.4 4xx 클라이언트 에러
        • 4.5 5xx 서버 에러
      • 5. HTTP와 연계하는 웹 서버
        • 5.1 1대로 멀티 도메인을 가능하게 하는 가상 호스트
        • 5.2 통신을 중계하는 프로그램 : 프록시, 게이트웨이, 터널
      • 7. 웹을 안전하게 HTTPS
        • 7.1 HTTP의 약점
        • 7.2 HTTP+암호화+인증+완전성보호 = HTTPS
  • IDE
    • Webstorm
      • 웹스톰 단축키
      • 웹스톰 소스코드 특정폴더 검색 제외
  • GIT
    • Git 기초 명령어
Powered by GitBook
On this page
  • 화살표 함수 선언방식
  • function 키워드 선언과 차이점
  • 이벤트 callback 함수의 this
  • 화살표 함수 arguments
  • call, apply, bind

Was this helpful?

  1. Javascript
  2. ECMAScript 6

화살표 함수

function 키워드 대신 화살표로 간략한 함수 표현이 가능하다. 익명함수로만 사용가능하고 함수표현식으로 사용한다.

화살표 함수 선언방식

function 키워드로 선언하고 화살표 함수로 바꿔보자.

  function f() {}
  const f = () => {};
  --------------------
  
  function f(x) {
    return x;
  }
  const f = (x) => {
    return x;
  };
  const f = (x) => x; //return 문 생략가능.
  const f = x => x; //매개변수가 하나라면 괄호 생략가능.
  
  --------------------
  
  function f() {
    return { x: 1 };
  }
  
  const f = () => {
    return { x: 1 };
  };
  
  const f = () => ({ x: 1 }); 
  //return 값이 객체리터럴이라면 소괄호() 로 감싸야 한다.
  
  ---------------------

function 키워드 선언과 차이점

  • this

function func() {
  console.log(this); //window
}

const arrowFunc = () => {
  console.log(this); //window
}

func();
arrowFunc();

위 예제는 콘솔결과는 별차이가 없다. 둘다 window를 가리킨다. 하지만 함수가 선언된 위치와 호출을 누가 했느냐에 따라 this가 바뀐다.

function func() {
  console.log(this);
}

const arrowFunc = () => {
  console.log(this);
}

const obj = {
  func: func,
  arrow: arrowFunc
}

obj.func();
obj.arrow();

obj.func 를 호출하면 this -> obj obj.arrow 를 호출하면 this-> window

??????

개발자의 의도대로라면 this가 obj가 나오는게 맞을것이다. 하지만 화살표함수는 그렇지가 않다. 이것으로 알 수 있는건 객체의 메소드로 쓸수가 없다는것이다. 메소드로 쓰일려면 function 키워드로 선언해서 써야한다.

그러면 화살표함수는 this를 어떻게 잡는것인가..

다음예제로 살펴보자.

const obj = {
  func: function() {
    return () => {
      console.log(this); //??
    }
  },
}

obj.func()();

뭔가 억지 스럽긴 하지만 화살표함수까지 호출하게 되면, this는 obj로 잡힌다. 그 이유는 화살표함수 this는 정적으로 결정되고 그 기준은 함수가 선언된 상위스코프 this 를 참조한다.

화살표함수가 선언된곳 -> obj.func 함수 안 -> func 함수안의 this - > obj 고로 화살표함수 안의 this는-> obj

func 함수를 화살표 함수로 선언하면? func 함수의 this는 window이고 고로 this는 window로 바뀐다.

이벤트 callback 함수의 this

const btn = document.querySelector('#btn');
btn.addEventListener('click', function() {
  console.log(this); //button
});

btn.addEventListener('click', () => {
  console.log(this); //window
});

function 콜백함수 내의 this는 button을 가리키지만, 화살표 함수의 this는 상위컨텍스트 window를 가리킨다.

화살표 함수 arguments

function func (x){
 console.log(arguments);
}

const arrow = (x)=>{
	console.log(arguments); //x
}

func();
arrow();

function 키워드로 선언한 함수는 내부적으로 arguments 객체를 갖고 있지만, 화살표 함수는 없다.

function func(x) {
  if (arguments.length === 2) {
    console.log('파라미터 두개들어왔다!');
  }
}


func(1,2);

이런식으로 파라미터 갯수에 따라 다른 행동을 할 수있지만, 화살표함수는 불가능하다.

const func = (...x) => {
  if (x.length === 2) {
    console.log('파라미터 두개 들어왔다!!');
  }
}


func(1, 2);

화살표 함수로 똑같이 구현한다면 Spread 문법으로 구현 할 수 있다.

call, apply, bind

명시적으로 this를 바인딩 해주는 함수이다.

function func(a,b) {
  this.a = a;
  this.b = b;
}

const obj = {
  lang: 'javascript'
}

func.call(obj,1,2); // func함수 호출시 this를 obj로 바인딩 후 호출
console.log(obj); //{lang,a,b}

하지만 화살표 함수는 this를 변경 할 수 없다.

const func = (a, b) => {
  this.a = a;
  this.b = b;
}

const obj = {
  lang: 'javascript'
}

func.call(obj, 1, 2);
console.log(obj); //{lang}
Previouslet, constNext구조분해할당

Last updated 2 years ago

Was this helpful?