1. 즉시 실행되는 익명 함수라고합니다 (즉시 호출하는 함수라고도 함)
2. 익명 함수가 동봉되고 브래킷이 후면에 추가되면 익명 함수를 즉시 실행할 수 있습니다! 마법 같은 것이 있습니까?
3. 함수를 사용하려면 먼저 그 존재를 선언해야합니다. 우리가 사용하는 가장 일반적인 방법은 함수 명령문을 사용하여 함수를 정의하는 것입니다.
4. 기능 객체
함수 객체는 JavaScript의 고유 한 객체이며 모든 함수는 실제로 기능 객체입니다.
먼저 기능 객체가 생성자를 직접 사용하여 새 기능을 만들 수 있는지 여부를 살펴 보겠습니다. 대답은 예입니다.
var abc = new 함수 ( "x", "y", "return x*y;"); 경고 (ABC (2,3)); // "6"
5. 익명 함수에는 이름이 없으므로 이름이 없으므로 (O_O)를 호출 해야하는 방법에 대한 질문으로 확장됩니까?
익명 기능의 호출
var abc = function (x, y) {return x+y; } 경고 (ABC (2,3)); // "5"위의 작업은 실제로 다른 방식으로 함수를 정의하는 것과 같습니다. 이 사용법은 우리가 더 자주 만나는 것입니다.
예를 들어, DOM 요소 이벤트 핸들러 기능을 설정하면 일반적으로 이름을 지정하지 않고 해당 이벤트에 익명 기능에 대한 참조를 제공합니다.
익명 기능을 호출합니다
익명 함수를 동봉하기 위해 ()를 사용한 다음 한 쌍의 브래킷 (매개 변수 목록 포함)을 추가하십시오.
ALERT ((새 함수 ( "x", "y", "return x*y;") (2,3)); // "6"
6. 브래킷의 역할은 무엇입니까?
괄호는 우리의 표현을 덩어리로 나눌 수 있으며, 각 조각, 즉 각 버팀대 쌍에는 반환 값이 있습니다. 이 반환 값은 실제로 괄호 안에서 표현식의 반환 값입니다.
따라서, 우리가 한 쌍의 괄호로 익명 함수를 동봉하면 괄호는 익명 함수의 함수 객체를 반환합니다.
따라서 브래킷 쌍에 익명 함수를 추가하는 것은 명명 된 기능과 같으며 기준 위치를 얻습니다. 따라서이 참조 변수 이후에 매개 변수 목록을 추가하면 일반 함수의 호출 양식이 구현됩니다.
7. 기능 선언, 기능 표현, 익명 함수
함수 선언 : 함수 fnname () {…}; 함수 키워드를 사용하여 함수를 선언 한 다음 함수 선언이라는 함수 이름을 지정하십시오.
함수 표현식 var fnname = function () {…}; 함수 키워드를 사용하여 함수를 선언하지만 함수의 이름은 없습니다. 마지막으로, 익명 함수는 기능 표현이라고하는 변수가 할당되며, 이는 가장 일반적인 형태의 함수 표현식 구문입니다.
익명 함수 : function () {}; 함수 키워드를 사용하여 함수를 선언하지만 함수의 이름이 지정되지 않으므로 익명 함수라고합니다. 익명 함수는 기능 표현에 속합니다. 익명 기능에는 많은 기능이 있습니다. 변수를 할당하면 함수를 생성하고 이벤트를 할당하면 이벤트 핸들러가되거나 폐쇄 등을 만듭니다.
함수 선언과 기능 표현의 차이점은
1. JavaScript 엔진이 JavaScript 코드를 구문 분석 할 때, 현재 실행 환경 (SCOPE)에서 '함수 선언 호이 스팅'(함수 선언 호이 스팅) 기능 선언. 함수 표현식은 JavascIRTP 엔진이 선으로 실행될 때까지 기다려야합니다.
2. 함수 표현식은 그 후 괄호로 즉시 호출 할 수 있습니다. 함수 선언은 수행 할 수 없으며 fnname ()의 형태로만 호출 될 수 있습니다.
밤나무
fnname (); funnname () {...} // normal, '함수 선언'을 '촉진'함수 선언을 '촉진'하기 때문에 함수 호출이 fnname (); var fnname = function () {...} // 오류가보고되며, 변수 fnname은 함수에 대한 참조를 저장하지 않았으며 함수 표현이어야합니다.밤나무
var fnname = function () {alert ( 'hello world');} (); // 함수 표현식 후에 소포가 추가됩니다. JavaScript 엔진이 여기서 구문 분석 할 때, JavaScript 엔진이 여기에 pnname () {alert ( 'hello world');} (); // 오류가 없을 것이지만 JavaScript 엔진은 기능 선언 만 말하면 기능 선언이 무시하지 않을 것입니다. } (); // 구문 오류, 익명 함수는 함수 표현식에 속하지만 할당 작업이 수행되지 않지만 JavaScript 엔진은 처음에 함수 키워드를 함수 선언으로 취급하고 오류를보고합니다. 기능 이름이 필요합니다.기능 본문 후 브래킷을 추가하려면 즉시 호출 할 수 있습니다. 그러면이 기능은 함수 선언이 아닌 함수 표현식이어야합니다.
밤나무
(a) {console.log (a); // firebug output 123, () 연산자} (123); // Firebug Output 12345, 사용! 연산자} (12345); +함수 (a) {console.log (a); // FireBug 출력 123456, use + 연산자} (123456); -기능 (a) {console.log (a); // FireBug 출력 1234567, 사용 - 연산자} (1234567); var fn = function (a) {console.log (a); // FireBug 출력 12345678, use = 연산자} (12345678)출력 결과를보고 기능 전에 추가 할 수 있습니다! , +, - 그리고 쉼표조차도 함수가 정의 된 직후에 실행하는 데 사용될 수 있습니다. +, -, = = 함수 선언을 함수 표현으로 변환하여 JavaScript 엔진 사이의 모호성을 제거하여 기능 표현 및 함수 선언을 식별하고 JavaScript 엔진에 기능 선언이 아니라 기능 표현이라고 말하면 기능 선언 후에 괄호를 추가하고 기능 코드를 즉시 실행할 수 있습니다.
브래킷을 추가하는 것은 가장 안전한 방법입니다. 왜냐하면! , +및 -와 같은 연산자는 또한 함수의 리턴 값으로 작업을 수행하므로 때로는 불필요한 문제가 발생합니다.
그러나 이런 식으로 쓰는 것은 무엇입니까?
JavaScript에는 개인 범위의 개념이 없습니다. 여러 사람이 개발 한 프로젝트에서 글로벌 또는 로컬 범위의 일부 변수를 선언하면 같은 이름을 가진 다른 사람들이 덮어 쓸 수 있습니다. JavaScript 함수의 범위 체인의 특성에 따르면,이 기술은 개인 범위를 모방하고 익명 기능을 "컨테이너"로 사용하는 데 사용될 수 있습니다. "컨테이너"는 외부 변수에 액세스 할 수 있지만 외부 환경은 "컨테이너"내부의 변수에 액세스 할 수 없으므로 내부에 정의 된 변수 (function () {…}) ()는 일반적으로 "익명 래저"또는 "네임 스페이스"로 알려진 외부 변수와 충돌하지 않습니다.
jQuery는이 방법을 사용합니다. jQuery 코드가 (함수 (Window, Undefined) {… JQuery Code…} (Window)에 래핑하면 전역 범위에서 jQuery 코드를 호출 할 때 jQuery의 내부 변수를 보호 할 수 있습니다.