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

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

WBOY
WBOY원래의
2016-05-16 15:15:551156검색

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

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을 통해서만 이름과 속성에 액세스할 수 있는 표현식 메서드입니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.