• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 JavaScript, TS 게시판 function(){} 과 ()=>{} 차이 질문

function(){} 과 ()=>{} 차이 질문

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #29663

    임호균
    참가자

    수업 매우 매우 잘 듣고있습니다.

    질문이 있어 남깁니다.

    이 부분은 chatroom.html에서 '안삼' 적고 전송버튼 누를때 firebase 메세지 컬렉션에 추가하는 부분입니다.

     

    db.collection("chatroom")
    .where("who", "array-contains", 내uid)
    .get()
    .then((result) => {
    result.forEach((a) => {
    var template = `<li class="list-group-item">
    <h6>${a.data().product}</h6>
    <h6 class="text-small">${a.id}</h6>
    </li>`;
    $(".chat-list").append(template);

    $(".list-group-item").click(() => {
    chatRoomId = $(this).children(".text-small").text();
    console.log("채팅방 선택됨", chatRoomId);
    });
    });
    });
    var chatRoomId;

    //send 누를 시 채팅 내용 남기기
    $("#send").click(() => {
    var 데이터 = {
    content: $("#chat-input").val(),
    date: new Date(),
    uid: 내uid,
    };
    db.collection("chatroom")
    .doc(chatRoomId)
    .collection("messages")
    .add(데이터)
    .then(() => {
    console.log("채팅 추가함");
    });
    });

     

    ------여기까지 제가 수업들으면서 짠 코드인데 arrow function 으로 짯을때 chatRoomId를 가져오지 못하더라구요.

    한참을 작성하신 코드와 비교하며 뭐가 다른가 보다 보다,, 결국 찾은게  ()=>{} 이걸 function(){}으로 바꿨더니 가져오더라구요..

    arrow function에서는 this를 다르게 처리 해줘야하는건가요? 아니면 못받으니 그냥 function을 써야하나요?

    $(".list-group-item").click(() => {
    chatRoomId = $(this).children(".text-small").text();
    console.log("채팅방 선택됨", chatRoomId);

    왜 arrow function 은 안되고, function(){}은 되나요...? 

    #29665

    임호균
    참가자

    한참 삽질하고 this 바인딩 이슈인걸 알고 찾아보니.. 상위 스코프에 this를 가져온다고 잘 설명된 글을 보았습니다.

    답은 삽질에 있었네요...

    https://velog.io/@wiostz98kr/JavaScript-this%EC%9D%98-4%EA%B0%80%EC%A7%80-%EB%B0%94%EC%9D%B8%EB%94%A9-%EC%BC%80%EC%9D%B4%EC%8A%A4%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98Arrow-Function

    #29674

    codingapple
    키 마스터

    arrow function 안에서 this 쓰면 함수 바깥에 있던 this를 그대로 사용합니다

    그냥 함수안에서 this쓰면 상황에맞게 this를 정의해줍니다 

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠