이 기사에서는 익명 함수가 무엇인지, 그리고 그것이 가져오는 이점에 대해서는 다루지 않을 것입니다. 먼저 일반적으로 사용되는 익명 함수를 살펴보겠습니다.
(function(){alert('yo')})()
많은 학생 이런 익명 함수를 사용하는 방법을 알지만 이렇게 작성하면 왜 익명 함수를 호출할 수 있는지 이해하지 못할 수도 있습니다. 아마도 다음 괄호가 이전 함수를 실행한다는 것을 알지만 이전 괄호가 무엇을 의미하는지 모를 수도 있습니다! 이 문서에서는 익명 함수의 코드 패턴 원칙을 이해하도록 안내합니다.
자, 먼저 더 많은 익명 함수 호출 패턴을 살펴보겠습니다.
(function(){alert(1);}())
(function(){alert(2);})()
void function(){alert( 3);}( )
위 3개는 정확하고 기능적으로 동일합니다.
잘못된 작성 방식을 살펴보겠습니다.
4.
function(){alert('yo')}()
위 코드에서는 구문 오류가 발생합니다. 이 질문에 대해 Qin Ge의 답변을 살펴보겠습니다.
1. 함수 리터럴: 먼저 함수 개체를 선언한 다음 실행합니다.
2. 우선순위 표현식: 자바스크립트는 괄호 안쪽부터 바깥쪽으로 표현식을 실행하므로, 괄호를 사용하여 선언된 함수를 강제로 실행할 수 있습니다.
3.void 연산자: 괄호로 묶이지 않은 단일 피연산자를 수행하려면 void 연산자를 사용합니다.
좋아요, 답이 맞든 아니든 이것들은 제쳐두고 함수 선언 구문과 함수 표현식 구문을 살펴보겠습니다.
1. 함수 선언:
함수 이름([param[, param[, ... param]]] ) {
statements
}
여기서 함수 이름 이름은 생략할 수 없습니다. 함수 이름이 생략되면 오류가 보고됩니다.
이것은 왜
function(){alert('yo')}
를 직접 작성하면 오류가 발생하는지 합리적으로 설명합니다. 컴파일러는 이를 함수 선언으로 처리하고 함수 이름이 코드에 표시되지 않으므로 결과를 예측할 수 있습니다.
2. 함수 표현:
함수 [name ]([param] [, param] [..., param]) {
statements
}
함수 이름 이름은 생략 가능합니다. -익명 함수라고 합니다. 명확히 하면: 익명 함수를 생성해야 하는 경우 함수의 명시적인 선언이 아닌 함수 표현식을 제공해야 합니다.
이제 더 정확한 설명을 할 수 있습니다.
123 익명 함수 코드 패턴은 다름이 아닙니다. 괄호 또는 void는 컴파일러에게 function(){}을 함수 표현식으로 해석하도록 지시합니다. 우선순위와 무효 연산자의 복잡한 원칙은 없습니다. 이는 단순한 구문 변환에 지나지 않습니다.
상상할 수 있듯이 함수 표현식의 구문을 준수하는 한
!!function(){
alert('yo')
}()
function() {
alert(' yo');
}()
어쩌고 계속...
더 깊은 미스터리는 없습니다. 단지 함수 선언과 선언의 차이일 뿐입니다. 표현을 이해하지 못했다면 어쩌면 지나치게 생각하고 복잡하게 만들고 있는 것일 수도 있습니다.
현재 Javascript 학습을 위한 특별한 전문 교육 과정이나 강좌가 마련되어 있지 않습니다. 코딩 능력 향상은 각자의 일상적인 연습과 축적에 달려 있습니다. 그러나 이런 일이 많을수록 가장 기본적인 지식을 무시하고 단순한 문제를 복잡하게 만드는 것은 바람직하지 않습니다. 어떤 학생들은 자바스크립트를 세부적으로 배우지 않고도 사용할 수 있다는 태도로 배우기도 하지만, 실제로는 결국 자신의 능력이 크게 향상되지 않는 경우도 있습니다. 탐탁지 않은!
장문 읽기:
JavaScript 함수 선언을 둘러싼 괄호는 무엇을 의미하나요?