자바스크립트 함수 표현식 학습을 시작하고 다음 내용을 주의 깊게 읽어보세요.
1. 일반적인 함수 생성 형식에서는 코드를 실행하기 전에 함수 선언을 읽어 들이므로 함수 호출 아래에 함수 선언을 작성할 수 있습니다.
sayHi(); function sayHi(){ alert("Hi!"); }
2. 함수 표현식을 사용하여 호출하기 전에 값을 할당해야 하는 함수를 만듭니다.
sayHi(); //错误!!函数不存在 var sayHi=function(){ alert("Hi!"); }
3. 재귀
일반 재귀
function factorial(num){ if (num <= 1){ return 1; } else { return num * factorial(num-1); } }
arguments.callee는 실행 중인 함수에 대한 포인터이며 재귀를 구현하는 데 사용할 수 있습니다.
function factorial(num){ if (num <= 1){ return 1; } else { return num * arguments.callee(num-1); } }
4. 클로저( 클로저는 다른 범위의 변수에 접근할 수 있는 함수를 말합니다).
클로저를 생성하는 일반적인 방법은 다른 함수 내에 함수를 생성하는 것입니다. 함수가 실행되면 실행 환경과 해당 범위 체인이 생성됩니다. 클로저는 포함된 함수에 있는 모든 변수의 마지막 값만 취할 수 있습니다:
function createFunctions(){ var result = new Array(); for (var i=0; i < 10; i++){ result[i] = function(){ return i; }; } return result; } var funcs = createFunctions(); //every function outputs 10 for (var i=0; i < funcs.length; i++){ document.write(funcs[i]() + "<br />"); }
위 코드는 10개를 모두 출력합니다. 그 이유는 다음과 같습니다: 각 funcs 함수는 활성 객체 createFunctions()(함수, 객체 및 참조 유형 Function 유형)를 저장하고 활성 객체 createFunctions()에는 변수 i가 있으므로 모든 각 funcs는 이것을 갖습니다. 변수 i는 createFunctions() 함수가 결과를 반환할 때 i가 10이 됩니다. 따라서 funcs 배열의 각 값은 10입니다.
다음과 같이 변형될 수 있습니다:
function createFunctions(){ var result = new Array(); for (var i=0; i < 10; i++){ result[i] = function(num){ return function(){ return num; }; }(i); } return result; }
각 익명 함수가 호출되면 i의 현재 값이 num에 주어지고 익명 함수 내부에는 num이라는 클로저가 생성되어 반환됩니다. 이런 방식으로 배열을 반환하는 각 함수에는 num 변수의 자체 복사본이 있습니다. (이 단락은 명확하게 설명되어 있지 않으므로 독자들이 스스로 알아낼 수 있습니다. 더 나은 설명 방법이 있으면 기사 아래에 의견을 남겨주세요. 감사합니다)
5. 이 물체
6. 블록 수준 범위(프라이빗 범위)를 모방합니다
다음과 같습니다:
function outputNumbers(count){ for (var i=0; i < count; i++){ alert(i); } alert(i); //count } outputNumbers(5);
Java 등의 언어에서는 for에 있는 변수 i가 사용되면 소멸됩니다. 자바스크립트에서는 OutputNumbers를 호출하면 Active 객체가 생성되는데, 이 i는 이 Active 객체에 속하므로 정의되어 있으므로 함수 내 어디에서나 접근이 가능하며, Active 객체 내에서 공유됩니다.
익명 함수 구문(개인 범위 생성):
(function(){ //这里是块级作用域 })();
함수 선언을 괄호 안에 넣어 표현식임을 나타내며, 뒤에 괄호를 추가하면 바로 호출할 수 있습니다.
일부 변수가 일시적으로 필요한 경우 비공개 범위를 사용할 수 있습니다.
function outputNumbers(count){ (function () { for (var i=0; i < count; i++){ alert(i); } })(); alert(i); //causes an error }
위 코드에서 i는 비공개이며, 알림이 여전히 활성 개체 내에 있더라도 익명 함수(비공개 도메인) 외부에서 i에 액세스하면 오류가 보고됩니다.
7. 프라이빗 변수
함수 내부에 정의된 매개변수, 지역 변수 및 기타 함수는 모두 함수의 전용 변수입니다. 예:
function add(num1,num2){ var sum = num1 + num2; return sum; }
3개의 개인 변수가 있습니다: num1, num2, sum. 함수 내부에서는 접근이 가능하지만 외부에서는 접근이 불가능합니다.
권한 있는 메서드는 개인 변수에 액세스할 수 있습니다. 간단히 넣고 표현식을 사용하여 클로저를 제공하고 클로저 내부의 다른 함수에 액세스할 수 있습니다.
function Person(name){ var a=0; this.getName = function(){ return name + a; }; this.setName = function (value) { name = value; }; }
This.getName 및 this.setName은 Person 인스턴스를 생성한 후 getName 또는 setName을 통해서만 이름과 속성에 액세스할 수 있는 표현식 메서드입니다.
위 내용은 이 글의 전체 내용이며, 모든 분들의 공부에 도움이 되었으면 좋겠습니다.