[JavaScript 기초] 학습 ①⑦ -- 패키지 닫기

2477 단어

화합의 결과를 되돌리지 않고 화합의 함수를 되돌린다

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]);
f(); // 15

호출할 때마다 새로운 함수를 되돌려줍니다.

var f1 = lazy_sum([1, 2, 3, 4, 5]);
var f2 = lazy_sum([1, 2, 3, 4, 5]);
f1 === f2; // false

반환된 함수는 즉시 실행되지 않고 f () 를 호출할 때까지 실행됩니다.

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];

arr는 함수를 저장합니다.
f1(); // 16
f2(); // 16
f3(); // 16

되돌아오는 함수는 변수 i를 인용하지만, 즉각 실행되는 것은 아닙니다.세 함수가 모두 되돌아올 때 인용된 변수 i는 4가 되었기 때문에 최종 결과는 16이다.
만약 반드시 순환 변수를 인용해야 한다면 어떻게 합니까?방법은 함수를 하나 더 만들고 이 함수의 매개 변수로 순환 변수의 현재 값을 귀속시키는 것입니다. 이 순환 변수가 다음에 어떻게 바뀌든지 간에 함수 매개 변수에 귀속된 값은 변하지 않습니다.
function count() {
    var arr = [];
    for (var i=1; i<=3; i++) {
        arr.push((function (n) {
            return function () {
                return n * n;
            }
        })(i));
    }
    return arr;
}

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

f1(); // 1
f2(); // 4
f3(); // 9

익명 함수를 만들고 바로 실행하는 문법

(function (x) {
    return x * x;
})(3); // 9

JavaScript 구문 해석 문제로 인해 SyntaxError 오류가 발생합니다.

(function (x) { return x * x }) (3);
(function (x) {
    return x * x;
})(3);

폐쇄를 빌려 마찬가지로 개인 변수를 봉인할 수 있다

'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

패키지 닫기를 이용하여 새로운 함수 pow2와 pow3 만들기

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

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

pow2(5); // 25
pow3(7); // 343

좋은 웹페이지 즐겨찾기