[JavaScript 기초] 학습 ①⑦ -- 패키지 닫기
화합의 결과를 되돌리지 않고 화합의 함수를 되돌린다
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.