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