> 웹 프론트엔드 > JS 튜토리얼 > 자바스크립트 함수 표현_자바스크립트 기술에 대한 간략한 분석

자바스크립트 함수 표현_자바스크립트 기술에 대한 간략한 분석

WBOY
풀어 주다: 2016-05-16 15:15:55
원래의
1146명이 탐색했습니다.

자바스크립트 함수 표현식 학습을 시작하고 다음 내용을 주의 깊게 읽어보세요.

1. 일반적인 함수 생성 형식에서는 코드를 실행하기 전에 함수 선언을 읽어 들이므로 함수 호출 아래에 함수 선언을 작성할 수 있습니다.

 sayHi();
 function sayHi(){
     alert("Hi!");
}
로그인 후 복사

2. 함수 표현식을 사용하여 호출하기 전에 값을 할당해야 하는 함수를 만듭니다.

 sayHi(); //错误!!函数不存在
 var sayHi=function(){
     alert("Hi!");
}
로그인 후 복사

3. 재귀

일반 재귀

function factorial(num){
        if (num <= 1){
          return 1;
        } else {
          return num * factorial(num-1);
        }
      }
로그인 후 복사

arguments.callee는 실행 중인 함수에 대한 포인터이며 재귀를 구현하는 데 사용할 수 있습니다.

function factorial(num){
        if (num <= 1){
          return 1;
        } else {
          return num * arguments.callee(num-1);
        }
      }

로그인 후 복사

4. 클로저( 클로저는 다른 범위의 변수에 접근할 수 있는 함수를 말합니다).
클로저를 생성하는 일반적인 방법은 다른 함수 내에 함수를 생성하는 것입니다. 함수가 실행되면 실행 환경과 해당 범위 체인이 생성됩니다. 클로저는 포함된 함수에 있는 모든 변수의 마지막 값만 취할 수 있습니다:

function createFunctions(){
        var result = new Array();
        
        for (var i=0; i < 10; i++){
          result[i] = function(){
            return i;
          };
        }
        
        return result;
      }
      
      var funcs = createFunctions();
      
      //every function outputs 10
      for (var i=0; i < funcs.length; i++){
        document.write(funcs[i]() + "<br />");
      }
로그인 후 복사

위 코드는 10개를 모두 출력합니다. 그 이유는 다음과 같습니다: 각 funcs 함수는 활성 객체 createFunctions()(함수, 객체 및 참조 유형 Function 유형)를 저장하고 활성 객체 createFunctions()에는 변수 i가 있으므로 모든 각 funcs는 이것을 갖습니다. 변수 i는 createFunctions() 함수가 결과를 반환할 때 i가 10이 됩니다. 따라서 funcs 배열의 각 값은 10입니다.

다음과 같이 변형될 수 있습니다:

function createFunctions(){
        var result = new Array();
        
        for (var i=0; i < 10; i++){
          result[i] = function(num){
            return function(){
              return num;
            };
          }(i);
        }
        
        return result;
      }
로그인 후 복사

각 익명 함수가 호출되면 i의 현재 값이 num에 주어지고 익명 함수 내부에는 num이라는 클로저가 생성되어 반환됩니다. 이런 방식으로 배열을 반환하는 각 함수에는 num 변수의 자체 복사본이 있습니다. (이 단락은 명확하게 설명되어 있지 않으므로 독자들이 스스로 알아낼 수 있습니다. 더 나은 설명 방법이 있으면 기사 아래에 의견을 남겨주세요. 감사합니다)

5. 이 물체

  • 전역 함수에서는 window와 동일합니다.
  • 함수를 메소드로 호출하면 해당 객체와 동일합니다.
  • 각 함수가 호출되면 이 함수는 자동으로 두 개의 특수 변수인 this와 인수를 가져옵니다. 내부 함수는 이 두 변수를 검색할 때 활성 개체까지만 검색합니다.

6. 블록 수준 범위(프라이빗 범위)를 모방합니다
다음과 같습니다:

function outputNumbers(count){
        for (var i=0; i < count; i++){
          alert(i);
        }
      
        alert(i);  //count
      }

      outputNumbers(5);

로그인 후 복사

Java 등의 언어에서는 for에 있는 변수 i가 사용되면 소멸됩니다. 자바스크립트에서는 OutputNumbers를 호출하면 Active 객체가 생성되는데, 이 i는 이 Active 객체에 속하므로 정의되어 있으므로 함수 내 어디에서나 접근이 가능하며, Active 객체 내에서 공유됩니다.

익명 함수 구문(개인 범위 생성):

(function(){
 //这里是块级作用域
})();
로그인 후 복사

함수 선언을 괄호 안에 넣어 표현식임을 나타내며, 뒤에 괄호를 추가하면 바로 호출할 수 있습니다.

일부 변수가 일시적으로 필요한 경우 비공개 범위를 사용할 수 있습니다.

function outputNumbers(count){
      
        (function () {
          for (var i=0; i < count; i++){
            alert(i);
          }
        })();
        
        alert(i);  //causes an error
      }
로그인 후 복사

위 코드에서 i는 비공개이며, 알림이 여전히 활성 개체 내에 있더라도 익명 함수(비공개 도메인) 외부에서 i에 액세스하면 오류가 보고됩니다.

7. 프라이빗 변수
함수 내부에 정의된 매개변수, 지역 변수 및 기타 함수는 모두 함수의 전용 변수입니다. 예:

function add(num1,num2){
  var sum = num1 + num2;
  return sum; 
}
로그인 후 복사

3개의 개인 변수가 있습니다: num1, num2, sum. 함수 내부에서는 접근이 가능하지만 외부에서는 접근이 불가능합니다.

권한 있는 메서드는 개인 변수에 액세스할 수 있습니다. 간단히 넣고 표현식을 사용하여 클로저를 제공하고 클로저 내부의 다른 함수에 액세스할 수 있습니다.

 function Person(name){

        var a=0;
      
        this.getName = function(){
          return name + a;
        };
      
        this.setName = function (value) {
          name = value;
        };
      }

로그인 후 복사

This.getName 및 this.setName은 Person 인스턴스를 생성한 후 getName 또는 setName을 통해서만 이름과 속성에 액세스할 수 있는 표현식 메서드입니다.

위 내용은 이 글의 전체 내용이며, 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿