> 웹 프론트엔드 > JS 튜토리얼 > JS 기본 튜토리얼: 자바스크립트 익명 함수 배우기

JS 기본 튜토리얼: 자바스크립트 익명 함수 배우기

黄舟
풀어 주다: 2016-12-15 10:55:29
원래의
1611명이 탐색했습니다.

JS 기본 튜토리얼: 자바스크립트 익명 함수 배우기

John Resig는 세심한 연구로 우리가 일반적으로 사용하는 익명 함수도 찾아낼 수 있는 꼼꼼하고 사려 깊은 사람임에 틀림이 없습니다. 새로운 것으로. 일반적으로 재귀는 함수가 자신을 호출할 때 발생합니다. 우리는 다음과 같은 함수 호출에 익숙하지 않습니다.

1.함수 소리(n){
2. return n > 0 ? 소리(n-1) + "a" : "hiy"; .alert(yell(4))//결과는 다음과 같습니다: hiyaaaa;

단일 함수에는 문제가 없습니다. 익명 함수를 사용하여 객체 안에 배치하면 어떻게 될까요?

1.var ninja = {

2. 외침: function(n){

3. ninja.yell(n-1) + "a" : "안녕하세요." “; 새로운 객체를 생성하고 닌자의 외침 방법을 복사했는데 상황이 다릅니다. 익명 함수가 ninja 내부에 있으므로 이 메서드는 여전히 ninja 개체의 lonely 메서드에 대한 참조입니다. 닌자 객체를 재정의하면 문제가 발생합니다.


01.var ninja = {
02.yell: function(n){
03.return n > 0 ?

04. 🎜>05.};

06. var samurai = { 외침: ninja.yell }; try {

09.alert(samurai.yell(4);

10.} catch(e) 🎜>11.alert("어, 이거 안 좋아! ninja.yell 어디 갔어?" )
12.}
13.//결과는 "어, 이건 아니야." good! ninja.yell은 어디로 갔나요?"

이 문제를 해결하는 방법은 무엇입니까? 소리 지르는 방법을 더 안정적으로 만드는 방법은 무엇입니까? 가장 일반적인 방법은 ninja.yell 방법 내부에 "this"를 사용하여 모든 것을 변경하는 것입니다. ninja 객체의 인스턴스, 즉:

1.var ninja = {
2.       function(n){
3. return n > "a" : "안녕하세요"; 🎜>이제 테스트하면 필요한 결과를 얻을 수 있습니다. 물론 이것은 익명 함수의 이름을 지정하는 것입니다. :


01.var ninja = {  
04.              } 
05.};

06.alert((ninja.yell(4)) + " 기대하세요!" );

07.var samurai = { 외침: ninja.yell };

08.var ninja = {};

09.alert( (samurai.yell(4))+ " 메서드가 자신을 올바르게 호출합니다." );

익명 함수의 이름을 지정하면 한 단계 더 나아갈 수 있습니다. 일반적인 변수 선언의 경우 다음과 같이 시도해 볼 수도 있습니다.

1. var ninja = function myNinja(){

2.  ​​ Alert ( (ninja == myNinja) + " 이 함수에는 두 가지 이름이 지정됩니다 - 한 번에!" );

3.}; ninja();


위 함수를 실행합니다. IE에서는 "flase 이 함수의 이름은 두 가지로 지정됩니다 – 한 번에!"이고, FF에서는 "true 이 함수의 이름은 다음과 같습니다. 두 가지를 – 동시에!". 저자는 다음과 같이 지적했습니다. 익명 함수에는 이름을 지정할 수 있지만 함수 자체 내에서만 표시됩니다. 그렇지 않은 것 같습니다. 테스트 결과 IE에서는 보이지 않지만 FF에서는 작성자가 예상한 대로 결과가 나타납니다. 동시에 myNinja를 테스트했는데, IE와 FF에서도 결과가 달랐습니다.


1.alert( typeof myNinja);
2.//FF에서는 "undefinde"입니다.
3.//IE에서는 "function"입니다

익명 함수의 이름 지정은 IE의 FF 외부에서만 볼 수 있고 함수 내부에서만 볼 수 있습니다. 실제로 다음과 같이 인수.callee를 사용하여 필요한 결과를 얻을 수 있습니다.


1.var ninja = {
2. 외침: function(n){
3. ";
4. }
5.};
6.alert ( ninja.yell(4));

Arguments.callee는 모든 함수에 사용할 수 있으며 함수 자체에 액세스할 수 있는 안정적인 방법을 제공합니다. 나는 이 방법이 비교적 간단하고 신뢰할 수 있다고 생각한다.

요약하자면 이 모든 방법은 복잡한 코드 구조를 처리하는 데 큰 도움이 될 것입니다. 사용을 선택하면 코드 구조가 더 간결하고 명확해지며 이는 작성자의 원래 의도일 수 있습니다.

위 내용은 JS 기본 튜토리얼입니다: 자바스크립트 익명함수 내용 학습 더 많은 관련 글은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿