js노트04-클립: 함수 내부에 정의된 함수

2130 단어

함수를 반환값으로 하다


일반적인 대수조의 구화
function sum(arr) {
    return arr.reduce(function (x, y) {
        return x + y;
    });
}

sum([1, 2, 3, 4, 5]); // 15

만약 먼저 화해를 구하지 않고 뒤에서 사용할 때 화해를 구한다면 이렇게 할 수 있다.
function lazy_sum(arr) {
    var sum = function () {
        return arr.reduce(function (x, y) {
            return x + y;
        });
    }
    return sum;
}

호출 시
var f = lazy_sum([1, 2, 3, 4, 5]); // function sum()  f lazy_sum 
                                   //   sum

f();//15  f() , .

관련 매개 변수와 변수는 모두 되돌아오는 함수에 저장됩니다. "닫기(Closure)"라고 불리는 프로그램 구조
우리가 lazy_를 호출하면sum () 은 호출할 때마다 같은 인자를 불러와도 새 함수를 되돌려줍니다.

가방을 닫다


되돌아오는 함수를 이해하는 것은 즉각 실행되지 않았다
function count() {
    var arr = [];
    for (var i=1; i<=3; i++) {
        arr.push(function () {
            return i * i;
        });
    }
    return arr;
}

var results = count();
var f1 = results[0];
var f2 = results[1];
var f3 = results[2];

//  f1(),f2() f3() 1,4,9, :

f1(); // 16
f2(); // 16
f3(); // 16
// 16
// , ,  return i * i;
// ,i 4 ,   16

패키지를 되돌릴 때 명심해야 할 점은 반환 함수는 어떤 순환 변수를 인용하지 않거나 다음에 변화가 발생할 변수를 인용하지 않는다는 것이다.만약 반드시 사용해야 한다면, 함수를 다시 도입하여 현재 순환 변수의 값을 귀속시키고, 생략한다.
패키지를 닫는 것은 함수를 되돌려주고 봉인된 개인 변수를 지연시키기 위한 것이 아닙니다.
'use strict';

function create_counter(initial) {
    var x = initial || 0;
    return {
        inc: function () {
            x += 1;
            return x;
        }
    }
}

// 

var c1 = create_counter();
c1.inc(); // 1
c1.inc(); // 2
c1.inc(); // 3

var c2 = create_counter(10);
c2.inc(); // 11
c2.inc(); // 12
c2.inc(); // 13

반환된 대상에서 패키지를 실행했습니다. 이 패키지는 국부 변수 x를 가지고 있고 외부 코드에서 변수 x에 접근할 수 없습니다.다시 말하면 클러치는 소지 상태의 함수이며, 그 상태는 완전히 대외적으로 숨겨질 수 있다.
패키지를 닫고 새 함수 pow2와 pow3를 만듭니다.
'use strict';

function make_pow(n) {
    return function (x) {
        return Math.pow(x, n);
    }
}

//  :
var pow2 = make_pow(2);
var pow3 = make_pow(3);

console.log(pow2(5)); // 25
console.log(pow3(7)); // 343

좋은 웹페이지 즐겨찾기