불활성 함수 정의 모드 사용 방법 1 / 3 페이지

2167 단어
이 글 은 함수 식 프로 그래 밍 (functional - programming) 디자인 모델 을 논술 하고 있 으 며, 나 는 불활성 함수 정의 (Lazy) 라 고 부른다. Function Definition)。나 는 이러한 모델 이 자바 스 크 립 트 에서 큰 도움 이 되 는 것 을 한 번 도 발견 하지 못 했다. 특히 브 라 우 저 를 뛰 어 넘 고 효율 적 으로 실행 되 는 라 이브 러 리 를 만 들 때.
워밍업 문제
함수 foo 를 만 듭 니 다. Date 대상 을 되 돌려 줍 니 다. 이 대상 은 foo 가 처음으로 호출 된 시간 을 저장 합 니 다.
방법 1: 상고 시대 의 기술
이 가장 초라 한 솔 루 션 은 Date 대상 을 저장 하기 위해 전역 변수 t 를 사용 합 니 다.foo 가 처음 호출 될 때 t 에 시간 을 저장 합 니 다.다음 재 호출, foo 는 t 에 저 장 된 값 만 되 돌려 줍 니 다.
 
  
var t; 
function foo() { 
    if (t) { 
        return t; 
    } 
    t = new Date(); 
    return t; 


하지만 이런 코드 는 두 가지 문제 가 있다.첫째, 변수 t 는 불필요 한 전역 변수 이 고 foo 호출 간격 이 변 경 될 수 있 습 니 다.둘째, 호출 할 때 이 코드 들 의 효율 은 최적화 되 지 않 았 다. 매번 호출 되 기 때문이다. foo 는 모두 값 조건 을 구 해 야 합 니 다.비록 이 예 에서 값 을 구 하 는 조건 은 결코 비효 율 적 이지 않 지만 현실 세계 의 실천 예 에서 매우 비 싼 조건 으로 값 을 구 하 는 경우 가 많다. 예 를 들 어 if - else - else -... 의 구조 에서.
방법 2: 모듈 모드
우 리 는 Cornford 덕분 이 라 고 여 겨 질 수 있다. 화해시키다 Crockford 의 모듈 모델 로 첫 번 째 방법의 결함 을 보완 한다.패 키 지 를 사용 하면 전역 변수 t 를 숨 길 수 있 습 니 다. foo 내 코드 만 접근 할 수 있 습 니 다.
 
  
var foo = (function() { 
    var t; 
    return function() { 
        if (t) { 
            return t; 
        } 
        t = new Date(); 
        return t; 
    } 
})(); 

그러나 이것 은 여전히 호출 시의 효율 을 최적화 시 키 지 못 했다. 왜냐하면 매번 foo 를 호출 할 때마다 값 을 구 하 는 조건 이 필요 하기 때문이다.
비록 모듈 모드 는 강력 한 도구 이지 만, 나 는 이런 상황 에서 그것 이 잘못 사용 되 었 다 고 굳 게 믿는다.
방법 3: 함수 대상
JavaScript 의 함수 도 대상 이기 때문에 속성 을 가 질 수 있 습 니 다. 우 리 는 이 를 통 해 모듈 모델 과 질 이 떨 어 지지 않 는 해결 방안 을 실현 할 수 있 습 니 다.
 
  
function foo() { 
    if (foo.t) { 
        return foo.t; 
    } 
    foo.t = new Date(); 
    return foo.t; 


일부 상황 에서 속성 을 가 진 함수 대상 은 비교적 뚜렷 한 해결 방안 을 만 들 수 있다.나 는 이 방법 이 이념 적 으로 모델 모듈 방법 보다 더욱 간단 하 다 고 생각한다.
이 해결 방안 은 첫 번 째 방법 중의 전역 변수 t 를 피 했 지만 foo 가 매번 호출 할 때마다 가 져 오 는 조건 의 값 을 해결 할 수 없습니다.
1, 2, 3 다음 페이지 전문 읽 기

좋은 웹페이지 즐겨찾기