JavaScript는 다른 프로그래밍 언어에 비해 더 캐주얼하므로 JavaScript 코드는 모든 종류의 이상한 쓰기 방법으로 가득합니다. 때로는 안개 속에서 꽃을 볼 수 있습니다. 물론 다양한 유형의 작문 방법을 이해할 수 있다는 것도 JavaScript 언어의 특성에 대한 심층적 인 이해입니다.
(function () {…}) () 및 (function () {…} ())는 JavaScript에서 함수를 즉시 실행하는 두 가지 일반적인 방법입니다. 처음에 나는 그것이 브래킷에 싸인 익명 기능이라고 생각한 다음 브래킷을 추가하여 함수를 호출했습니다. 마지막으로 함수가 정의 된 직후에 실행하는 목적을 달성했습니다. 나중에, 나는 괄호를 추가하는 이유가 사실이 아니라는 것을 알았습니다. 함수 실행을 즉시 이해하려면 먼저 일부 기본 기능 개념을 이해해야합니다.
함수 선언, 기능 표현, 익명 함수
함수 선언 : 함수 fnname () {…}; 함수 키워드를 사용하여 함수를 선언 한 다음 함수 선언이라는 함수 이름을 지정하십시오.
함수 표현식 var fnname = function () {…}; 함수 키워드를 사용하여 함수를 선언하지만 함수의 이름은 없습니다. 마지막으로, 익명 함수는 기능 표현이라고하는 변수가 할당되며, 이는 가장 일반적인 형태의 함수 표현식 구문입니다.
익명 함수 : function () {}; 함수 키워드를 사용하여 함수를 선언하지만 함수의 이름이 지정되지 않으므로 익명 함수라고합니다. 익명 함수는 기능 표현에 속합니다. 익명 기능에는 많은 기능이 있습니다. 변수를 할당하면 함수를 생성하고 이벤트를 할당하면 이벤트 핸들러가되거나 폐쇄 등을 만듭니다.
함수 선언과 함수 표현식의 차이점은 1. JavaScript 코드를 구문 분석 할 때 JavaScript 엔진은 현재 실행 환경 (범위)에 대한 '기능 선언 프로모션'(함수 선언 후조) 기능 선언을한다. 함수 표현식은 JavascIRTP 엔진이 선으로 실행될 때까지 기다려야합니다. 2. 함수 표현식은 함수 표현식 후 괄호로 즉시 호출 될 수 있습니다. 함수 선언은 수행 할 수 없으며 fnname ()의 형태로만 호출 될 수 있습니다. 다음은 둘 사이의 차이점에 대한 두 가지 예입니다.
fnname (); funnname () {...} // normal, '함수 선언'을 '촉진'함수 선언, 함수 호출은 fnname (); var fnname = function () {...} // 오류가보고되어 함수에 대한 참조를 저장하지 않았으며 함수 호출 이후에 기능 표현이어야합니다. var fnname = function () {alert ( 'hello world');} (); // 함수 표현식 후에 소포가 추가됩니다. JavaScript 엔진이 여기에서 구문 분석 할 때, 함수는 즉시 함수 fnname () {alert ( 'hello world');} (); // 오류가 없지만 JavaScript 엔진은 함수 선언 만 구문 분석하고 후속 괄호를 무시하며 함수 (console.log) ( 'Hello World')가 아닙니다. } (); // 구문 오류, 익명 함수는 함수 표현식에 속하지만 할당 작업이 수행되지 않지만 JavaScript 엔진은 처음에 함수 키워드를 함수 선언으로 취급하고 오류를보고합니다. 기능 이름이 필요합니다.몇 가지 기본 함수 개념을 이해 한 후 (function () {…}) ()와 (function () {…} ()))를 즉시 작성하는 두 가지 방법을 다시 살펴 보았습니다. 처음에 나는 그것이 브래킷에 싸인 익명의 기능이라고 생각하고 그 기능을 즉시 호출하기 위해 브래킷을 추가했습니다. 그 당시 나는 왜 괄호를 추가 해야하는지 몰랐습니다. 나중에 나는 기능 본문 후 괄호를 추가해야한다면 즉시 호출 할 수 있다는 것을 깨달았습니다. 이 함수는 함수 선언이 아닌 함수 표현식이어야합니다.
(function (a) {console.log (a); // firebug output 123, () 연산자} (123); (function (a) {console.log (a); // firebug output 1234, () 연산자} (1234)); ! 함수 (a) {console.log (a); // Firebug Output 12345, 사용! 연산자} (12345); +함수 (a) {console.log (a); // FireBug Output 123456, 사용 + 연산자} (123456); -기능 (a) {console.log (a); // FireBug Output 1234567, 사용 - 연산자} (1234567); var fn = function (a) {console.log (a); // FireBug Output 12345678, = 연산자} (12345678)출력 결과를보고 기능 전에 추가 할 수 있습니다! , +, - 그리고 쉼표조차도 함수가 정의 된 직후에 실행하는 데 사용될 수 있습니다. +, -, = = 함수 선언을 함수 표현으로 변환하여 JavaScript 엔진 사이의 모호성을 제거하여 기능 표현 및 함수 선언을 식별하고 JavaScript 엔진에 기능 선언이 아니라 기능 표현이라고 말하면 기능 선언 후에 괄호를 추가하고 기능 코드를 즉시 실행할 수 있습니다.
브래킷을 추가하는 것은 가장 안전한 방법입니다. 왜냐하면! , +및 -와 같은 연산자는 또한 함수의 리턴 값으로 작업을 수행하므로 때로는 불필요한 문제가 발생합니다.
그러나 이런 식으로 쓰는 것은 무엇입니까?
JavaScript에는 개인 범위의 개념이 없습니다. 여러 사람이 개발 한 프로젝트에서 글로벌 또는 로컬 범위의 일부 변수를 선언하면 같은 이름을 가진 다른 사람들이 덮어 쓸 수 있습니다. JavaScript 함수의 범위 체인의 특성에 따르면,이 기술은 개인 범위를 모방하고 익명 기능을 "컨테이너"로 사용하는 데 사용될 수 있습니다. "컨테이너"는 외부 변수에 액세스 할 수 있지만 외부 환경은 "컨테이너"내부의 변수에 액세스 할 수 없으므로 내부에 정의 된 변수 (function () {…}) ()는 일반적으로 "익명 래저"또는 "네임 스페이스"로 알려진 외부 변수와 충돌하지 않습니다.
jQuery는이 방법을 사용합니다. jQuery 코드가 (함수 (Window, Undefined) {… JQuery Code…} (Window)에 래핑하면 전역 범위에서 jQuery 코드를 호출 할 때 jQuery의 내부 변수를 보호 할 수 있습니다.
이 기사는 개인적인 이해와 편집입니다. 오류가 있으면 지적하십시오. 기사의 견해는 다음에서 참조됩니다.
"JavaScript에 대한 권한 가이드"및 "고급 프로그래밍"