블로그 내 검색

2012. 5. 1.

자바카페 세미나 발표자료

발표 자료 공유합니다.

이런 발표는 처음이라 참 어색하고 긴장됐는데 끝나고 나니 아쉬움 밖에 안남네요.




다음에 다른 기회가 있었으면 좋겠네요.

댓글 6개:

  1. 질문좀 드려도 될까요? 올려주신 자료 잘 봤습니다 깔끔하게 정리가 잘되있네요..
    근데 익명함수를 선언하고 왜 괄호로 감싸셨는지 궁금합니다 그러니까,, function(){ ... }(). 이렇게 하지 않으시고 (function(){ ... })() 이렇게 하신 특별한 이유가 있으신지요?

    답글삭제
    답글
    1. 함수를 ()로 감싸서 표현식(expression)으로 만들지 않는다면, 문법 오류가 됩니다.

      함수는 함수 문장(statement)이 있고 함수 표현식이 있습니다.

      function a() { /* ... */ }; // 함수 문장

      // 함수 표현식
      var a = function(){ /* ... */ }
      (a = function(){ /* ... */ })
      (function a(){ /* ... */ })
      (function(){ /* ... */ })

      만 문법적으로 허용합니다.

      자바스크립트에서 뭔가의 실행할 대상이 되려면 표현식(expression) 이어야 하는데, function(){} 는 자바스크립트 엔진이 처리할 경우 기본적으로 함수 문장으로 해석하며, 함수 식별자(이름)을 빠뜨렸기에 문법 오류를 냅니다.

      () 연산자로 감싸주면 엔진이 사칙연산과 마찬가지로 () 안의 코드블록을 우선적으로 해석하며 값을 해석합니다. 그 뒤의 () 연산자가 함수로 판단하고 성공적ㅇ로 실행할 수 있죠.

      다음과 비슷한 경우라고 보시면 될 것 같습니다.
      {}.toString() // 오류
      ({}).toString() // "[Object object]"

      1.toString() // 오류
      (1).toString() // "1"

      ----------------------------------

      추가로 아래 브라우저별 에러 메시지를 한번 출력해봤는데, 공통적으로 문법 오류를 내고 있네요..

      function(){}() 을 실행할 경우

      Firefox
      SyntaxError: function statement requires a name

      Internet Explorer
      "식별자가 필요합니다."

      Chrome
      SyntaxError: Unexpected token )

      삭제
    2. 움.. 그럼 질문을 조금 바꿔서 아래와 같이 익명함수를 어떠한 변수에 할당할때는 함수 문장이나 표현식이나 다를거 같지 않은데요 왜 모듈 패턴 예제에서는 표현식을 쓰는걸까요?
      var app.controller.myController = (function() {. })()
      var app.controller.myController = function(){}()

      전부는 아니지만 대부분의 모듈패턴 예제가 표현식을 쓰더라구요... 이유가 잘 와닿질않네요

      삭제
    3. http://dmitrysoshnikov.com/ecmascript/chapter-5-functions/

      위 링크를 보시면 문법상 허용되는 것 같습니다.
      더글라스 크락포드가 추천하는 코딩 컨벤션은 명시적으로 괄호를 쓰는 거라고 합니다.

      뱀발이지만, 괄호를 쓰면,

      (function(){}()) // Oh!

      같은 문법도 허용되네요.
      아마도 명시적으로 함수 문장이 아닌 함수 표현식을 반환하라고 지정하기 때문인 것 같습니다.

      -----

      잘 몰라서 페이스북 커뮤니티인
      JSLounge(http://www.facebook.com/groups/422817677738745/)
      분들 도움을 받았네요.

      답글 달아주셔서 저도 공부가 됩니다.
      감사합니다!

      삭제
    4. 더 알아봐야겠지만,,, 쉽게 이해하기 어려운 부분인거 같습니다 ㅜㅜ
      아마도 이 글(http://yuiblog.com/blog/2007/06/12/module-pattern/)이 모듈패턴을 유행시키고 알린 최초의 글이 아닌가 싶은데요. 여기서 저자는 var namespace = function(){}(); 과 같은 스타일을 사용하고 있어서 더 혼란스러운거 같아요..
      아무튼 답변 감사합니다^^

      삭제
    5. 자바스크립트는 문법적으로 아직은 좀 어수선한 감이 있는거 같아요.
      지금 와서 고치는것도 힘들고...

      컨벤션이 다 그렇지만, 무엇을 쓰던지 한가지만 쓰는게 나을 것 같습니다.

      전 개인적으로 명시적인 () 감싸기가 좋네요.

      삭제