JavaScript 함수 표현 식 상세 설명 및 인 스 턴 스
6655 단어 JavaScript함수.표현 식
차례
함 수 를 정의 하 는 방식 은 두 가지 가 있 습 니 다.하 나 는 함수 성명 이 고 다른 하 나 는 함수 표현 식 입 니 다.
1.1 함수 선언
function functionName(arg){
//
}
함수 성명 에 대해 중요 한 특징 은 함수 성명 향상 입 니 다.코드 를 실행 하기 전에 함수 성명 을 먼저 읽 는 것 입 니 다.이것 은 함 수 를 호출 된 문장 뒤에 놓 을 수 있다 는 것 을 의미한다.다음 과 같다.
helloworld(); //
function helloworld(){
console.log("hello world");
}
1.2 함수 식
var functionName=function(arg){
//
}
이 형식 은 함 수 를 만 들 고 변수 functionName 에 값 을 부여 하 는 일반적인 변수 할당 문 처럼 보 입 니 다.이 경우 만 든 함 수 를 익명 함수 라 고 합 니 다.function 키워드 뒤에 식별 자가 없 기 때 문 입 니 다.함수 표현 식 은 다른 표현 식 과 마찬가지 로 사용 하기 전에 값 을 부여 해 야 합 니 다.아래 코드 가 오 류 를 일 으 킬 수 있 습 니 다.
helloworld(); // , ,
var helloworld=function(){
console.log("hello world");
}
함수 표현 식 이 있 으 면 우 리 는 함수 표현 식 에 동적 으로 값 을 부여 할 수 있 습 니 다.다음 코드 와 같이:
var helloworld; //
if(condition){ //
helloworld=function(){ //
console.log("hello world");
}
}
else{
helloworld=function(){ //
console.log(" , ");
}
}
2.재 귀 함수재 귀 함 수 는 한 함수 가 이름 을 통 해 자신 을 호출 하 는 상황 에서 구 성 된 것 이다(C\#등 언어 와 같 기 때문에 프로그램의 핵심 사상 은 차이 가 많 지 않다.다만 문법 적 으로 차이 가 있 을 뿐이다.한 언어의 기 초 를 잘 배우 면 다른 것 을 쉽게 배 울 수 있다).전형 적 인 재 귀 면접 문 제 를 들 면 한 열의 규칙 은 다음 과 같다.1,1,2,3,5,8,13,21.34............................................................ 재 귀 알고리즘 으로 이 루어 집 니 다.코드 는 다음 과 같 습 니 다.
function foo(n) {
if (n <= 0)
return 0;
else if (n > 0 && n <= 2)
return 1;
else
return foo(n - 1) + foo(n - 2);
}
이 함 수 는 문제 가 없 는 것 처럼 보이 지만 아래 코드 는 오류 가 발생 할 수 있 습 니 다.
var foo1 = foo;
foo = null;
console.log(foo1(34));
상기 코드 는 먼저 foo()함 수 를 변수 foo 1 에 저장 한 다음 에 foo 변 수 를 null 로 설정 한 결과 원시 함수 에 대한 인용 이 하나 밖 에 남지 않 았 습 니 다.그러나 다음 에 foo 1()을 호출 할 때 foo()를 실행 해 야 하기 때문에 foo 는 이미 null 이기 때문에 오류 가 발생 할 수 있 습 니 다.이 경우 arguments.callee 를 사용 하면 이 문 제 를 해결 할 수 있 습 니 다.arguments.callee 는 실행 중인 함 수 를 가리 키 는 지침 이기 때문에 함수 에 대한 재 귀적 호출 을 실현 할 수 있 습 니 다.
function foo(n) {
if (n <= 0)
return 0;
else if (n > 0 && n <= 2)
return 1;
else
return arguments.callee(n - 1) + arguments.callee(n - 2);
}
이름 함수 표현 식 을 사용 하여 같은 결 과 를 얻 을 수 있 습 니 다.예 를 들 면:
var foo = (function f(n) {
if (n <= 0)
return 0;
else if (n > 0 && n <= 2)
return 1;
else
return f(n - 1) + f(n - 2);
});
셋째,폐쇄3.1 패 킷 은 다른 함수 역할 영역 에 접근 할 수 있 는 변 수 를 말 합 니 다.패 킷 을 만 드 는 흔 한 방식 은 한 함수 내부 에 다른 함 수 를 만 드 는 것 입 니 다.패 킷 을 이해 하려 면 먼저 자바 스 크 립 트 의 특수 변수의 역할 영역 을 이해 해 야 합 니 다.변수의 작용 역 은 두 가지,전역 변수 와 국부 변수 가 아니다.다음은 몇 개의 demo 를 써 서 직관 적 으로 표현 한다.
함수 내부 에서 전역 변 수 를 직접 읽 기:
var n = 100; //
function fn() {
console.log(n); //
}
fn();
함수 외부 에서 부분 변 수 를 직접 읽 을 수 없습니다:
function fn() {
var n = 100;
}
console.log(n); //n is not defined
여기 서 주의해 야 할 것 은 함수 내부 에서 변 수 를 설명 할 때 반드시 var 를 사용 해 야 한 다 는 것 입 니 다.사용 하지 않 으 면 전역 변수 가 됩 니 다.
function fn() {
n = 100;
}
fn();
console.log(n); //100
때때로 우 리 는 함수 내부 성명 의 변 수 를 받 아야 하기 때문에 위 에서 언급 한 패 킷 을 만 드 는 일반적인 방식 을 사용 하여 함수 내부 에 다른 함 수 를 만 들 수 있 습 니 다.
function fn() {
n = 100;
function fn1() {
console.log(n);
}
fn1();
}
fn(); //100
위의 코드 에서 함수 fn1 은 함수 fn 내부 에 포함 되 어 있 습 니 다.이때 fm 내부 의 모든 부분 변 수 는 fn1 에 대해 볼 수 있 습 니 다.그러나 반대로 안 됩 니 다.fn1 내부 의 부분 변 수 는 fn 에 보이 지 않 습 니 다.이것 이 바로 자바 script 언어 특유 의'체인 역할 도 메 인'구조 로 하위 대상 은 모든 부모 대상 의 변 수 를 한 단계 씩 위로 찾 습 니 다.따라서 부모 대상 의 모든 변 수 는 자식 대상 을 볼 수 있 고 그렇지 않 으 면 성립 되 지 않 습 니 다.fn1 이 fn 내부 변 수 를 읽 을 수 있다 니,fn1 을 반환 값 으로 하면 외부 에서 fn 변 수 를 읽 을 수 있 습 니 다.
function fn() {
n = 100;
function fn1() {
console.log(n);
}
return fn1;
}
var result=fn();
result(); //100
여기 서 fn1 은 패 킷 을 닫 는 것 이 고 패 킷 을 닫 는 것 은 다른 함수 내부 변 수 를 읽 을 수 있 는 함수 입 니 다.자 바스 크 립 트 언어 에 서 는 함수 내부 의 하위 함수 만 국부 변 수 를 읽 을 수 있 기 때문에 패 키 지 를 닫 는 것 을'함수 내부 에 정 의 된 함수'로 간단하게 이해 할 수 있 습 니 다.그래서 본질 적 으로 폐쇄 는 함수 내부 와 함수 외 부 를 연결 하 는 다리 이다.3.2 폐쇄 적 용도
그것 의 가장 큰 용 도 는 두 가지 가 있 습 니 다.하 나 는 앞에서 언급 한 함수 내 부 를 읽 을 수 있 는 변수 이 고 다른 하 나 는 이 변수의 값 을 항상 메모리 에 유지 하 는 것 입 니 다.다음 코드 와 같이:
function fn() {
n = 100;
nadd = function () {
n += 1;
}
function fn1() {
console.log(n);
}
return fn1;
}
var result = fn();
result(); //100
nadd();
result(); //101
메모:패 킷 함 수 는 함 수 를 포함 하 는 역할 영역 을 가지 고 있 기 때문에 다른 함수 보다 더 많은 메모 리 를 사용 할 수 있 습 니 다.패 킷 을 지나치게 사용 하면 메모리 가 너무 많이 차지 할 수 있 으 므 로 함 수 를 종료 하기 전에 사용 하지 않 는 부분 변 수 를 모두 삭제 합 니 다.4.블록 급 역할 영역
블록 급 역할 영역(사유 역할 영역 이 라 고도 함)의 익명 함수 의 문법 은 다음 과 같다.
(function(){
//
})();
어느 곳 에서 든 임시 적 으로 변 수 를 필요 로 하면 개인 역할 도 메 인 을 사용 할 수 있 습 니 다.예 를 들 어:
(function () {
var now = new Date();
if (now.getMonth() == 0 && now.getDate() == 1) {
alert(" ");
}
})();
위의 코드 를 전역 역할 영역 에 넣 으 면 1 월 1 일이 되면'새해 복 많이 받 으 세 요'라 는 축복 이 팝 업 됩 니 다.이런 기술 은 전역 작용 역 에서 함수 외부 에 자주 사용 되 기 때문에 전역 작용 역 에 너무 많은 변수 와 함 수 를 추가 하 는 것 을 제한한다.일반적으로,우 리 는 전역 작용 역 에 변수 와 함 수 를 최대한 적 게 추가 해 야 한다.많은 개발 자 들 이 공동으로 참여 하 는 대형 응용 프로그램 에서 과도 한 전역 변수 와 함 수 는 명명 충돌 을 초래 하기 쉽다.그리고 개인 용 역할 도 메 인 을 만 들 면 모든 개발 자 는 자신의 변 수 를 사용 할 수 있 을 뿐만 아니 라 전체적인 역할 도 메 인 을 흐 트 러 뜨리 는 것 도 걱정 할 필요 가 없다.읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.