학습 노트 (6): 함수
14482 단어 JavaScript함수.
하 나 는 함수 성명 입 니 다. 실제 변 수 는 함수 대상 을 가리 키 는 변 수 를 설명 합 니 다.둘째, 함수 표현 식 입 니 다. 이 방식 으로 함수 의 이름 을 선택 할 수 있 습 니 다. 보통 함수 이름 이 없 지만 있 을 수 있 습 니 다. 예 를 들 어:
var f = function fact(x) {
if (x <= 1) {
return 1;
}
else {
return x * fact(x-1);
}
}
이때 함수 이름 은 실제 함수 내부 의 부분 변수 입 니 다.이렇게 재 귀 가 필요 할 때 가 아니면 이름 을 요구 해 서 는 안 된다.
함수 표현 식 을 사용 하면 한 번 만 사용 할 수 있 는 함 수 를 정의 하 는 데 적합 합 니 다.
함수 성명 은 진짜 문장 이 아 닙 니 다. 전역 적 으로 나 다른 함수 에 포 함 될 수 있 지만 if, 순환, try.. 블록 에 나타 날 수 없습니다. 그러나 함수 정의 표현 식 은 JS 코드 의 어느 곳 에 도 나타 날 수 있 습 니 다.
함수 이름
낙타 봉 식, 사유 함 수 는 보통시작프레임 워 크 프로 그래 밍 에서 자주 사용 하 는 함수 의 짧 은 이름 을 지정 할 수 있 습 니 다. 예 를 들 어 $= jQuery.
함수 호출
로:
간접 호출
call 과 apply 는 호출 에 필요 한 this 값 을 표시 하여 모든 함수 가 대상 으로 호출 할 수 있 도록 합 니 다.전 자 는 매개 변 수 를 하나씩 전달 하고 후 자 는 매개 변 수 를 하나의 배열 로 '포장 하여 전달' 하기 때문에 한 함수 에 들 어 가 는 실제 인삼 은 배열 이지 만 형 삼 은 단일 한 것 이 기 대 됩 니 다. 다음 과 같은 형식 을 사용 할 수 있 습 니 다.
func.apply(this,arrOfArg);
함수 의 실 삼 과 형 삼
function getPropertyNames(o, a) {
a = a || []; // ||a , ;
for(var pro in o) {
a.push(pro);
}
return a;
}
2. 들 어 오 는 실제 매개 변수 가 형 삼 을 초과 하면 이름 이 없 는 참조 할 만 한 것 을 직접 얻 을 수 없 지만 함수 내 에 하나의 배열 대상 arguments 가 실제 매개 변 수 를 가리 키 며 아래 표 시 를 통 해 들 어 오 는 실제 참 조 를 방문 할 수 있 습 니 다.
function f(x) {
console.log(x);
arguments[0] = null;
console.log(x);
}
var a = 12;
f(12);
var b = [1,2,3];
f(b);
위의 코드 에 서 는 실제 인삼 a 든 b 든 두 번 째 console. log 에 null 이 표 시 됩 니 다.arguments [0] = = x 를 실행 하 는 것 도 true 로 돌아 갑 니 다.따라서 실제 참조 형식 이 든 원본 형식의 값 이 든 arguments 와 x 는 같은 값 을 가리 키 며 그 중 하 나 를 수정 하면 다른 값 에 영향 을 줄 수 있 습 니 다.책 에서 말 한 것 처럼 일반 배열 에 들 어가 면 null 을 출력 하지 않 습 니 다.
3. arguments 대상 의 속성:
var fact = function(x) {
if (x <= 1) {
return 1;
}
return x * arguments.callee(x-1);
};
사용자 정의 함수 속성
함 수 는 특수 한 대상 으로 일반 변수 처럼 값 을 부여 하고 매개 변수 로 서 반환 값 으로 할 수 있 습 니 다.또한 속성 이 있 을 수 있 습 니 다. 함수 가 '정적' 변 수 를 필요 로 할 때 특정한 값 이 변 하지 않 고 함수 의 속성 으로 정의 할 수 있 습 니 다. 전역 변 수 를 정의 하 는 것 이 아니 라 함수 의 속성 으로 정의 할 수 있 습 니 다.
function fact(n) {
if (isFinite(n) && n>0 && n==Math.round(n)) {
if(!(n in fact)) {
fact[n] = n * fact(n-1); //
}
return fact[n];
}
else {
return NaN;
}
}
fact[1] = 1;
fact(10);
for(var v in fact) {
console.log(v + ': ' + fact[v]);
}
네 임 스페이스 로 서 의 함수
함수 내부 에서 정 의 된 변 수 는 모두 부분 변수 이기 때문에 하나의 함 수 를 네 임 스페이스 로 정의 할 수 있 고 내부 에서 정 의 된 변 수 는 외부 전역 변 수 를 오염 시 키 지 않 습 니 다.
폐쇄 하 다
1. 이해 역할 도 메 인 체인: 실행 환경 (전역 또는 함수) 에 들 어 갈 때마다이 환경 에서 변 수 를 저장 하기 위해 변 수 를 생 성 합 니 다. 이 대상 은 역할 도 메 인 체인 의 맨 앞 에 추 가 됩 니 다. 내부 함수 의 역할 도 메 인 체인 에는 외부 환경 역할 도 메 인 체인 을 가리 키 는 변수 대상 의 인용 이 포함 되 어 있 습 니 다. 따라서 외부 함수 가 실 행 된 후 내부 함수 가 외부 함수 에 대한 변수 대상 에 대한 인용 을 가지 고 있 기 때문에 외부 함수 가 실 행 된 후 에는 외부 함수 에 대한 참조 가 있 습 니 다.부 함수 역할 도 메 인 체인 의 변수 대상 은 소각 되 지 않 습 니 다. 따라서 외부 함수 가 실행 되면 내부 함 수 를 통 해 외부 함수 정의 변수 에 접근 할 수 있 습 니 다. 따라서 패 키 지 를 닫 으 면 함수 외부 에서 내부 정의 의 개인 변 수 를 간접 적 으로 방문 할 수 있 습 니 다. 예:
var uniqueInteger = (function() {
var counter = 0;
return function() {
console.log(counter);
counter++;
};
})();
uniqueInteger(); //0
uniqueInteger(); //1
uniqueInteger(); //2
counter 는 함수 가 정의 하 는 부분 변수 입 니 다. 그러나 이 익명 함 수 는 즉시 실행 되 고 닫 힌 패 킷 을 되 돌려 줍 니 다. 이 닫 힌 역할 도 메 인 체인 의 변수 대상 은 외부 함수 변 수 를 가지 고 있 기 때문에 닫 힌 패 킷 을 되 돌려 주 고 유 니 크 Integer 에 값 을 부여 한 후에 도 외부 에서 counter 를 방문 할 수 있 습 니 다. 유 니 크 Integer 는 닫 힌 패 킷 에 대한 인용 을 가지 고 있 기 때문에 닫 힌 역할 도 메 인 체인 은 줄곧 사용 되 지 않 습 니 다.소각 된다.
2. 함 수 는 호출 할 때마다 새로운 역할 도 메 인 체인 을 만 듭 니 다. 역할 도 메 인 체인 을 형성 하 는 변수 대상 이 무엇 인지 매번 알 고 싶다 면 폐쇄 를 이해 하기 어렵 지 않 습 니 다. 서로 방해 하지 않 는 두 개의 카운터:
function counter() {
var n = 0;
return {
count: function() { return n++;},
reset: function() { n = 0; }
};
}
var c = counter();
var d = counter();
매번 conter 를 호출 할 때마다 새로운 역할 도 메 인 체인 을 만 들 었 기 때문에 c, d 는 서로 다른 개인 변수 n 에 접근 할 수 있 습 니 다.
3. 여러 개의 패 킷 은 함수 내 부 를 포함 하 는 개인 변 수 를 공유 할 수 있 습 니 다. 패 킷 은 외부 함 수 를 통 해 되 돌아 오 거나 외부 대상 으로 하 는 방법 으로 외부 에서 도 패 킷 을 호출 할 수 있 습 니 다.
4. 하나의 함수 내부 의 패 키 지 는 이 함수 에서 정 의 된 부분 변 수 를 공유 하 는 것 입 니 다. 모든 패 키 지 는 각각 부분 변 수 를 복사 하 는 것 이 아니 라 모든 패 키 지 를 닫 는 역할 도 메 인 체인 에서 외부 함 수 를 가리 키 는 변수 대상 이 똑 같 습 니 다. 즉, 외부 함수 역할 도 메 인 체인 의 맨 앞 에 있 는 변수 대상 입 니 다.
function constfuncs() {
var funcs = [];
for (var i = 0; i < 10; i++) {
funcs[i] = function() {
return i;
};
}
return funcs;
}
funcs[5](); //9
여기 서 funcs 는 10 개의 패 킷 을 닫 은 배열 을 저장 하고 모든 패 킷 은 이 부분 변 수 를 공유 하 며 1 차 순환 을 거 친 후에 i 는 9 가 되 었 습 니 다.
5. 함수 마다 this 가 있 기 때문에 내장 함 수 는 외부 함수 this 값 에 접근 할 수 없습니다. 하나의 변수 에 표시 되 지 않 는 한 arguments 대상 도 this 와 유사 합 니 다. 변수 에 저장 해 야 포 함 된 함수 에 접근 할 수 있 습 니 다.
함수 의 속성, 방법 과 구조 함수
1. arguments. length 는 실제 들 어 오 는 실 삼 의 개수 이 고, arguments. callee. length 는 함수 의 length 속성 은 들 어 오 기 를 기대 하 는 실 삼 의 개수 즉 형 삼 의 개 수 를 나타 낸다.
2. prototype 속성 은 함수 마다 이 속성 이 있 습 니 다. 원형 대상 을 가리 키 고 있 습 니 다. 함수 가 구조 함수 일 때 새로 만 든 대상 은 원형 대상 에서 속성 을 계승 합 니 다.
3. call 과 apply 는 어떤 함수 가 하나의 대상 처럼 보일 수 있 는 방법 입 니 다. 이 함수 의 호출 컨 텍스트 를 입력 대상 으로 변경 할 수 있 습 니 다. 함수 제 에서 this 를 통 해 들 어 오 는 대상 의 인용 을 얻 을 수 있 습 니 다. ES5 엄격 한 모드 에서 들 어 오 는 첫 번 째 실 삼 은 this 값 으로 변 합 니 다. 원본 값 이나 null, undefined 가 들 어 오 더 라 도 ES3 와 비 엄격 모드 에 서 는 this 값 으로 변 합 니 다.들 어 오 는 null, undefined 는 전체 대상 으로 대체 되 고 원본 값 은 포장 대상 으로 대 체 됩 니 다.
4. bid 방법 은 함 수 를 대상 에 연결 하여 이 대상 의 방법 처럼 bid 를 새로운 함수 로 되 돌려 줍 니 다. call, apply 처럼 역할 영역 을 수정 하지 않 고 즉시 호출 할 수 있 습 니 다. bid 방법 을 실현 합 니 다.
function bind(f, o) {
if (f.bind) {
return f.bind(o);
}
return function() {
return f.apply(o, arguments);
}
}
function func(y) {
return this.x + y;
}
var o = {
x: 1
};
var resfunc = bind(func, o);
var res = resfunc(2); //3
bind 에 들 어 오 는 첫 번 째 실 삼 을 제외 한 다른 매개 변 수 는 this 에 연결 되 며, 이 함수 식 프로 그래 밍 기술 은 "currying" 이 라 고 합 니 다. 즉, f. bind (o,...) 는 일부 매개 변 수 를 순서대로 f 의 매개 변수 로 전송 할 수 있 으 며, 들 어 오 는 매개 변 수 는 o (즉 this) 의 속성 으로 전 달 됩 니 다. 이 외 에 f. bind (o,...)되 돌아 오 는 함 수 는 호출 할 때 실 삼 에 다시 들 어 갈 수 있 으 며, 형 삼 이 나타 나 는 순서에 따라 뒤에 남 은 형 삼 에 일일이 대응 할 수 있다. 예 를 들 어:
function f(y, z) {
return this.x + y + z;
}
var g = f.bind({x: 1}, 2); //x==1, y==2
g(3); // z==3, 6
5. toString 방법 은 함수 의 원본 코드 를 되 돌려 줍 니 다. Object. prototype. toString. apply (f) 는 '[Object Function]' 을 되 돌려 줍 니 다. 서로 다른 유형의 toString 방법 이 재 작성 되 었 기 때문에 종 류 를 검사 할 때 는 원형 방법 을 사용 해 야 합 니 다.
함수 식 프로 그래 밍
배열 의 map, reduce 등 방법 을 사용 하여 함수 식 프로 그래 밍 을 할 수 있 습 니 다.
고급 함수
즉, 하나 이상 의 함 수 를 매개 변수 로 받 아들 이 고 새로운 함 수 를 되 돌려 줍 니 다. 조작 함수 의 함수 입 니 다. 예 를 들 어 계산 과 평 법:
function compose(f, g) {
return function() {
return f.call(this, g.apply(this, arguments));
}
}
var square = function(x) { return x * x; };
var sum = function(x, y) { return x + y; };
var squareOfSum = compose(square, sum);
squareOfSum(2, 3); //25
이 함 수 는 두 함수 f, g 를 수신 하고 새로운 함수 h 를 되 돌려 h 에서 f (g) 의 계산 을 합 니 다. h 가 받 은 매개 변 수 는 g, g 의 결 과 를 매개 변수 로 f. g, f 가 사용 하 는 this 와 h 의 동일 함 을 전달 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.