• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

문득 궁금해서 질문 드립니다.

21.07.11 18:01 작성 조회수 142

1

스코프 관련해서는 항상 당연한듯 IIFE 로 하다가 생각해 보니 일반 코드 블럭으로 해도 되는거 아닌가? 하는 생각이 들어서 질문드립니다.

두 방식 모두 2:45에서 처럼 결과가 콘솔창에 잘 나오고

각 sum 함수만 접근 가능한 num 변수를 선언할 수도 있는데 (스코프 개념) IIFE 를 사용하신 이유가 있나요??

답변 2

·

답변을 작성해보세요.

0

Tree Code님의 프로필

Tree Code

2021.11.08

IIFE 앞에

;(function . . .

왜 세미콜론이 붙는지 궁금하네요

자바스크립트 엔진이 코드를 해석할때 세미콜론이 누락된 곳에 추가하는 단계(asi)가 있는데요.

  • https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Lexical_grammar#%EC%9E%90%EB%8F%99_%EC%84%B8%EB%AF%B8%EC%BD%9C%EB%A1%A0_%EC%82%BD%EC%9E%85

어떤 경우에는 세미콜론을 붙일 수 없어서 의도한대로 코드가 실행되지 않을수 있는 경우가 있어요.

foo()

(function() {})()

이런 경우인데요. asi가 한문장으로 여길수 있기 때문에 의도한 코드가 되지 않죠. 그래서 즉시 함수 실행같은경우 앞에 세미콜론을 붙여주기도 합니다.

0

기존에 함수 스코프를 사용하는 경우 iife 로 스코프를 격리한 것을 말씀드렸어요.

let이나 const 같은 경우는 블로 스코프를 사용하기 때문에 중괄호를 이용해 외부 접근을 막을 수 있는데요. 만약에 var num 로 선언한 변수라면 블록 외부에서 접근할 수 있게 됩니다.