기능은 JavaScript에서 가장 일반적으로 사용되는 개념입니다. JavaScript의 기능은 시작하기 가장 쉬운 기능이지만 JavaScript에서 이해하고 마스터하기 가장 어려운 개념입니다.
1. 함수 유형은 JS의 참조 유형 중 하나입니다. 각 함수는 실제로 자체 특성 및 메소드가있는 함수 유형의 인스턴스 객체입니다. 함수 객체로 인해 함수 이름은 실제로 함수 객체에 대한 포인터입니다.
2. 일반적으로 사용되는 기능 정의 방법
1. 기능 선언 :
함수 합 (a, b) {return a+b;}2. 표현 :
var sum = function () {return a+b; }; // Semicolon 참고 // 두 메소드의 차이점 : // 통역사가 가장 먼저 함수 선언을 읽고 실행하기 전에 액세스 할 수있게합니다. 표현식을 사용할 때는 파서가 해석 및 실행되기 전에 위치한 코드 라인에 실행될 때까지 기다려야합니다 (변수 선언이 발전되고 값이 제자리에 남아 있음) 경고 (sum (10, 10)); 함수 합계 (a, b) {return a+b;} // ↑ 위의 코드는 코드가 실행되기 전에 함수 선언을 통해 홍보하고, 실행 환경에 함수 선언을 읽고 추가하기 때문에 위의 코드는 정상적으로 실행됩니다. 경고 (합 (10, 10)); var sum = function (a, b) {return a+b;} // ↑ 함수가 함수 선언이 아닌 초기화 문에 있으며 발전되지 않지만 var 합을 발전시키고 연산자 유형을 사용하여 정의되지 않으므로 오류가보고되기 때문입니다.3. 함수 이름은 함수 객체에 대한 포인터 만 보유하므로 함수 이름은 객체 포인터를 포함하는 다른 변수, 즉 함수 객체에 여러 이름을 가질 수 있습니다.
함수 합 (a, b) {return a+b;} console.log (sum (2, 3)); // 5var anothersum = sum; // 변수 anothersum도 동일한 함수 객체 콘솔을 가리 킵니다 (Anothersum (4, 5)); // 9sum = null; // 합계 변수는 더 이상 기능 객체 콘솔에 포인터를 저장하지 않습니다. // 변수 anothersum을 여전히 호출 할 수 있습니다4. JS가 개념에 과부하가되지 않는 이유는 무엇입니까?
함수 추가 (a) {return a+3;} 함수 추가 (a) {return a+5;} var result = add (3); // 8 // 두 함수의 이름은 동일한 이름을 가지며 결과는 후자의 기능 만 이전 기능을 덮어 쓸 수 있으므로 다시로드 할 수 없습니다.5. 함수의 내부 속성 : 함수 내부에는 두 가지 특수 객체, 인수가 있습니다.
1. 논쟁 :
인수는 수신 함수의 모든 매개 변수를 포함하는 클래스의 배열 객체입니다. 이 개체에는 Callee라는 속성이 있습니다. 속성 값은 인수 객체를 소유 한 함수 자체를 가리키는 포인터입니다.
함수 foo () {var a = arguments.callee; return A.toString ();} foo ();/*결과를 반환합니다. 결과를 반환합니다. 이 기능은 재귀 적으로 호출 될 때 다소 유용하며 많은 결함이 있으며 ES5 Strict 모드에서 제거됩니다*/2. 이것은 간단히 말해서, 이것은 함수가 실행되는 환경 객체를 나타냅니다. 이것은 객체가 실행되는 객체를 나타냅니다. 확장하는 것은 매우 복잡합니다. 하나의 기사 만 있습니다
// todo :
3. ES5 함수의 다른 속성 인 발신자를 지정합니다. 이 함수 속성은 현재 함수를 호출하는 함수를 나타냅니다.
funner inner () {console.log (inner.caller);} function out () {inner ();} outer (); // 함수 OUTER () {inner ();}4. 길이 속성 : 함수가 받아들이려는 매개 변수 수를 나타냅니다.
함수 추가 (a, b, c) {return a+b+c;} add.length; // 35. 유명한 프로토 타입 속성은 간단히 말해서, 단순히 묻는 객체, 생성자를 호출하여 생성 된 객체는 특정 유형의 모든 인스턴스에서 공유 할 수있는 속성 및 메소드를 포함하는 객체입니다. 확장하는 것은 매우 복잡합니다. 하나의 기사 만 있습니다
// todo :
6. 함수의 두 가지 방법 : call () 및 apply (). 둘 다 기능을 특정 범위로 호출하고 실제로 기능 내부 에서이 값을 설정합니다.
1. Call () : apply () 메소드와 유사하게, 차이는 매개 변수를 수신하는 메소드가 다르고 매개 변수를 하나씩 나열해야한다는 것입니다.
2. Apply () : 두 매개 변수를 수신합니다. 하나는 기능 작동의 범위이고 다른 하나는 인수 클래스의 배열 또는 배열 객체 일 수있는 매개 변수 배열입니다.
함수 sum (a, b) {return a+b;} 함수 callum (a, b) {return sum.Apply (this, arguments);} // 두 번째 매개 변수는 배열 객체 인수 촉진 콜트 1 (a, b) {return sum.Apply (this, [a, b]);} // // 5 console.log (Callsum1 (3, 5)); // 83. 매개 변수 전달 및 호출 함수는 Call () 및 apply ()가 사용되는 장소가 아닙니다. 확장 기능 작동에 대한 진정한 강력한 점은
var color = 'red'; var obj = {color : 'blue'} function foo () {console.log (this.color); } foo (); //'red'foo.call(This) ;//'red'foo.call(Obj); // 'blue'// foo () 함수에 대한 마지막 호출의 실행 환경이 변경되었으며 이는 OBJ 객체를 가리키므로 '파란색'입니다.Call () 및 apply ()를 사용하여 스코프를 확장하는 것의 가장 큰 장점은 객체와 메소드를 분리하는 것입니다.
4. ES5는 새로운 메소드 : bind ()을 정의하며,이 값은 bind () 함수로 전달 된 값에 바인딩됩니다.
var x = 9; var module = {x : 81, getx : function () {return this.x; }}; module.getx (); // 81var retrievex = module.getx; retrievex (); // 9,이 경우 "이"는 "이"를 가리키기 때문에 var boundgetx = retrievex.bind (module); // retrievex () 함수에서 이것을 모듈에 영원히 바인 다음이 함수를 호출하여 모듈 객체에서 항상 boundgetx ()를 실행하십시오. // 81위는 편집기가 소개 한 JavaScript의 함수 유형에 대한 심층 분석입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 더 알고 싶다면 Wulin.com에주의를 기울이십시오.