달란
151
2017-10-12 20:51:47.0
2
507

자바스크립트를 공부하다가 갑자기 드는 궁금증이 생기네요.


이 엄청 까탈스러운(미친 클로저와 this..) js를 정말 어느정도 잘하게 된다면 만드는 프로젝트나 프로그램에 


어떠한 좋은 영향과 결과를 가져오게 되나요??

0
0
  • 댓글 2

  • 3
    2017-10-13 10:52:16.0 작성 2017-10-13 10:53:54.0 수정됨

    자바스크립트 변수는 스코프가 함수이며 함수가 실행종료되면 함수내 선언된 변수를 소멸하게됩니다.

    하지만 클로저를 이용한다면 함수 내부의 변수의 레퍼런스를 외부로 반환함으로써 반환된 변수의 레퍼런스를 참조하게되어 가비지 컬렉터에 의해 소멸되지 않기 때문에 함수내 지역변수를 스코프 밖에서 사용할수 있습니다. 자바처럼 형안정성이 없기 때문에 변수를 자유롭게 받아 활용할 수 있습니다.


    자바스크립트 this는 현재 실행 컨텍스트를 가르킵니다. 메소드빌려쓰기(call, apply)나 바인딩(bind)를 통해 해당하는 컨텍스트를 지정 할 수 있기 때문에 상속없이 메소드를 빌려쓰거나 원하는 객체와 묶어 기능을 제공할 수 있습니다.

    처음엔 this에 대해서 많이 까다롭다고 생각할 수 있지만 몇가지 특징만 이해한다면 생각보다 까다롭지 않습니다. 특징을 꼽아 보자면 아래정도 겠지만.. 딱 2가지만 아셔도 ( 함수 내부의 this는 window, 메소드내부의 this는 메소드를 감싸는 객체) 충분히 잘 활용할 수 있습니다.

    • 글로벌 스코프(window)에서 사용할경우 this는 전역객체 window
    • 함수에서 사용한경우 this는 전역 객체 window
    • 객체의 메소드에서 사용한경우 this는 메소드가 속한 객체
    • 객체의 메소드에 포함된 함수에서 사용한경우 this는 전역객체 window
    • 생성자 함수 내부에서 this는 생성자 함수를 통해 생성되는 인스턴스
    • setTimeout, setInterval함수는 선언시점과 함수 호출시점에 별개의 컨텍스트를 갖기 때문에 this는 window(use strict영향받지 않음)
    • use strict 를 선언하게되면 함수내부에서 선언된 this는 오토박싱으로 인해 전역객체를 가르키지않고 this는 undefined가 됨


    ※ es6의 arrow function을 사용한다면 함수 스코프를 무시하고 사용할 수 있습니다.

    1
  • 달란
    151
    2017-10-13 11:50:04.0

    UIDev

    아직 얼마나 안되서 그런지 굉장히 까다롭다고 느껴졌는데 답변에서 많은 도움을 얻고 가네요 

    감사합니다^^

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.