함수 역할 영역 및 즉시 실행 함수 표현 식

3109 단어
함수 역할 영역
JavaScript 함 수 는 특정한 코드 블록 을 말 합 니 다. 여러 개의 문 구 를 포함 할 수 있 으 며, 이름 을 통 해 다른 문 구 를 호출 하여 함수 에 포 함 된 코드 문 구 를 실행 할 수 있 습 니 다.
작용 역 은 변수 가 존재 하 는 범 위 를 가리킨다.JavaScript 는 두 가지 역할 영역 만 있 습 니 다:
  • 전역 역할 영역: 변 수 는 전체 프로그램 에 존재 하고 모든 곳 에서 읽 을 수 있 습 니 다.
  • 함수 역할 영역: 변 수 는 함수 내부 에 만 존재 합 니 다.

  • 함수 외부 에서 설명 하 는 것 은 전역 변수 입 니 다. 함수 내부 에서 읽 을 수 있 습 니 다.
    var a = 1;
    function fn() {
        console.log(a);
    }
    fn(); // 1
    

    함수 내부 에서 정 의 된 변 수 는 외부 에서 읽 을 수 없습니다. 이것 이 바로 부분 변수 입 니 다.
    function fn() {
        var b = 1;
    }
    b; // Uncaught ReferenceError: b is not defined
    

    함수 자체 도 하나의 값 이 고 자신의 역할 영역 도 있 습 니 다.그 역할 영역 은 변수 와 마찬가지 로 성명 할 때 있 는 역할 영역 입 니 다. 실행 할 때 있 는 역할 영역 과 무관 합 니 다.
    var a = 1;
    function fn1(){
      function fn2(){
        console.log(a)
      }
      function fn3(){
        var a = 4
        fn2()
      }
      var a = 2
      return fn3
    }
    var fn = fn1();
    fn() // 2
    

    위의 코드 에서 우리 가 필요 로 하 는 결 과 는 fn() 의 최종 출력 이다.우 리 는 먼저 층 층 이 위로 올 라 가 fn()fn1() 과 같 기 때문에 fn1() 의 결 과 를 살 펴 보 자.fn1() 에서 정의 a 는 2 이 고 전체 변 수 를 덮어 쓰 는 a 은 1 이다.이때 우리 에 게 반환 값 은 fn3() 이 고 우 리 는 보 러 가 고 있다 는 것 을 알려 주 었 다 fn3().fn3() 안의 반환 값 은 fn2() 이 고 fn2() 직접 a 의 값 을 인쇄 했 으 며 a 의 값 을 설정 하지 않 았 다.이때 우 리 는 fn2() 의 아버지 층 에 가서 찾 아야 한다 a.이때 발견 var a = 2 했 기 때문에 결 과 는 2 였 다.
    여기 서 우 리 는 역할 도 메 인 체인 을 통 해 결 과 를 찾 는 것 이 고 역할 도 메 인 체인 은 큰 역할 도 메 인 에서 형 성 된 관계 층 이다.하위 대상 은 모든 부모 대상 의 변 수 를 한 단계 한 단계 위로 찾 습 니 다.따라서 부모 대상 의 모든 변 수 는 하위 대상 을 볼 수 있 습 니 다.그러나 하위 대상 의 변 수 는 부모 대상 에 보이 지 않 습 니 다.
    우 리 는 함 수 를 해석 할 때 다음 과 같은 규칙 을 준수 해 야 한다.
  • 함수 가 실행 되 는 과정 에서 자신의 내부 에서 변 수 를 찾 습 니 다.
  • 찾 을 수 없 으 면 현재 함수 가 있 는 역할 영역 을 만 드 는 것 을 찾 아 위로 올 립 니 다.
  • 변 수 를 현재 상태 로 찾 습 니 다.

  • 함수 표현 식 즉시 실행
    자 바스 크 립 트 에서 한 쌍 의 괄호 () 는 함수 가 명 시 된 후에 이 함 수 를 호출 하 는 연산 자 입 니 다.예 를 들 어 fn() 는 호출 fn 함 수 를 나타 낸다.
    함수 표현 식 을 즉시 실행 하 는 것 은 JS 함 수 를 이용 하여 새로운 역할 영역 을 만 드 는 프로 그래 밍 방법 입 니 다.
    때때로 우 리 는 함 수 를 정의 한 후에 즉시 이 함 수 를 호출 해 야 한다.이 때 함수 의 정의 뒤에 괄호 를 붙 일 수 없습니다. 문법 오류 가 발생 할 수 있 습 니 다.
    funtion() {/*  */}();
    // Uncaught SyntaxError: Unexpected token {
    
    function 표현 식 으로 도 사용 할 수 있 고 문장 으로 도 실행 할 수 있 기 때문이다.
    해석 상의 잘못된 의 미 를 피하 기 위해 자 바스 크 립 트 엔진 은 function 키워드 가 줄 의 첫머리 에 나타 나 면 일률적으로 문장 으로 해석 하도록 규정 하고 있다.
    해결 방법 은 function 줄 에 나타 나 지 않도록 엔진 이 표현 식 으로 이해 하도록 하 는 것 이다.
    ( function () {} () );
    ( function () {} ) ();
    ! function () {} ();
    ~ function () {} ();
    - function () {} ();
    + function () {} ();
    

    이 서법 들 은 모두 가능 하 다.일반적으로 익명 함수 에 만 이러한 '즉시 실행 함수 표현 식' 을 사용 합 니 다.그것 은 세 가지 작용 이 있다.
  • 함수 에서 설명 하 는 변 수 를 변수 선언 사전 규칙
  • 으로 돌아 가게 합 니 다.
  • 새로운 변수 가 전역 변수 나 함수 명 으로 해석 되 지 않도록 전역 변수 명 을 차지 하 는 경우
  • 함수 내 변수 성명 에 접근 하지 못 하 는 상황 에서 외부 에서 함수 호출 을 허용 합 니 다
  • 좋은 웹페이지 즐겨찾기