> 웹 프론트엔드 > JS 튜토리얼 > Javascript_javascript 기술의 익명 함수 요약

Javascript_javascript 기술의 익명 함수 요약

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-05-16 18:37:48
원래의
909명이 탐색했습니다.

1. 익명함수란 무엇인가요?

Javascript에서 함수를 정의하는 방법은 일반적으로 세 가지가 있습니다.

  1. 함수 키워드(함수)문:
    <code>function fnMethodName(x){alert(x);}</code>
    로그인 후 복사
  2. 함수 리터럴:
    <code>var fnMethodName = function(x){alert(x);}</code>
    로그인 후 복사
  3. 함수() 생성자:
    <code>var fnMethodName = new Function('x','alert(x);')</code>
    로그인 후 복사

위의 세 가지 메소드는 동일한 메소드 함수 fnMethodName을 정의합니다. 첫 번째 메소드는 가장 일반적으로 사용되는 메소드입니다. 후자의 두 메소드는 함수를 fnMethodName 변수에 복사하며 이 함수에는 이름이 없습니다. 실제로 상당수의 언어에는 익명 기능이 있습니다.

2. 함수 리터럴과 Function() 생성자의 차이점

  1. 함수 리터럴은 익명 함수이지만 구문을 사용하면 재귀 함수를 작성할 때 자신을 호출할 수 있지만 Function() 생성자를 사용할 수는 없습니다.
    <code>var f = function fact(x) {
     if (x < = 1) return 1;
     else return x*fact(x-1);
    };</code>
    로그인 후 복사
  2. Function() 생성자를 사용하면 런타임 시 Javascript 코드를 동적으로 생성하고 컴파일할 수 있습니다. 이러한 방식은 전역 함수 eval()과 유사합니다.
  3. Function() 생성자는 함수 본문을 구문 분석하고 실행될 때마다 새 함수 객체를 생성합니다. 따라서 루프나 자주 실행되는 함수에서 Function() 생성자를 호출하는 효율성은 매우 낮습니다. 대조적으로, 함수 리터럴은 만날 때마다 다시 컴파일되지 않습니다.
  4. Function() 생성자를 사용하여 함수를 생성하면 일반적인 범위를 따르지 않으며 항상 최상위 함수로 실행됩니다.
    <code>var y = "global";
    function constructFunction() {
      var y = "local";
      return new Function("return y"); <span>// 无法获取局部变量</span>
    }
    alert(constructFunction()()); <span>// 输出 "global"</span>
    </code>
    로그인 후 복사

Function 키워드 정의에 비해 Function() 생성자는 고유한 특성이 있고 사용하기가 훨씬 어렵기 때문에 이 기술은 일반적으로 거의 사용되지 않습니다. 함수 리터럴 표현식은 함수 키워드 정의와 매우 유사합니다. 이전 차이점을 고려하면 OS X 10.4.3의 일부 웹킷 엔진에서 리터럴 익명 함수에 버그가 있다는 소식이 있지만 일반적으로 우리가 참조하는 익명 함수는 함수 리터럴 형식의 익명 함수를 나타냅니다. 자세한 내용은 "JavaScript: The Definitive Guide, 5th Edition"의 함수 장을 참조하세요.

3. 익명 함수의 코드 패턴

어제hedger wang자신의 블로그에 여러 익명 함수 코드 패턴을 소개했습니다.

오류 모드: 작동하지 않으며 브라우저에서 구문 오류를 보고합니다.

<code>function(){
 alert(1);
}();</code>
로그인 후 복사
  1. 함수 리터럴: 먼저 함수 개체를 선언한 다음 실행합니다.
    <code>(function(){
     alert(1);
    } ) ( );</code>
    로그인 후 복사
  2. 우선순위 표현식: Javascript는 괄호 안쪽부터 바깥쪽으로 표현식을 실행하므로 괄호를 사용하여 선언된 함수를 강제로 실행할 수 있습니다.
    <code>( function(){
     alert(2);
    } ( ) );</code>
    로그인 후 복사
  3. 공허 연산자 : 괄호로 묶이지 않은 단일 피연산자를 수행하려면 무효 연산자를 사용합니다.
    <code>void function(){
     alert(3);
    }()</code>
    로그인 후 복사

이 세 가지 방법은 동일합니다. Hedge Wang은 개인적인 이유로 세 번째 방법을 선호하지만 실제로 적용해본 결과는 첫 번째 방법입니다.

4. 익명 기능 적용

  1. "A Module Pattern for Javascript"의 첫 번째 문장은 "전역 변수는 악마다"입니다. var 키워드와 결합된 익명 함수는 전역 변수를 오염시키지 않고 Javascript가 페이지에 작성되도록 효과적으로 보장할 수 있습니다. 이는 익숙하지 않은 페이지에 Javascript를 추가할 때 매우 효과적이고 우아합니다. 실제로 익명 함수는 YUI 및 해당 예제에서 널리 사용되며, 다른 Javascript 라이브러리에서도 널리 사용됩니다.
  2. 자바스크립트는 함수형 프로그래밍의 초석입니다. 자세한 내용은 "함수형 프로그래밍 기법으로 아름다운 JavaScript 작성" "함수형 JavaScript 프로그래밍 안내서"를 참조하세요.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿