javascript_javascript 기술의 익명 기능을 통해 몇 가지 간단하고 흥미로운 코드 조각을 분석합니다.

WBOY
풀어 주다: 2016-05-16 18:24:26
원래의
852명이 탐색했습니다.

1. 간단한 형태의 캡슐화 호출

코드 복사 코드는 다음과 같습니다.

var userName = function( ) { return "jeff wong" } ();
alert(userName);


위 코드는 매우 간단하므로 점차적으로 다음과 같이 나눌 수 있습니다. 쓰기:
코드 복사 코드는 다음과 같습니다.

var anonymousFunc = function() { return "jeff wong" }; // 익명 함수
var name = anonymousFunc(); //사람의 이름을 반환하려면 이 함수를 실행하세요.
alert(name)


2. New는 Function의 형태(대문자 Function)
코드 복사 코드는 다음과 같습니다.

var a = new Object();
var b = new Function()
//alert(typeof (a)) //object
//alert(typeof ( b)); //함수
alert(a); //[ object Object]
alert(b); //익명함수
//alert(a == b); 🎜>//alert(a === b); //false



보시다시피, 새로운 Object를 생성했고, 팝업되는 변수는 [object Object입니다. ], 그리고 new a Function(대문자로 표기된 Function), b가 팝업되면 익명 함수가 생성됩니다. b는 익명 함수이므로 당연히 다음 코드를 실행하여 추측을 검증할 수 있습니다.

코드 복사 코드는 다음과 같습니다.
alert(b()); //정의되지 않음
alert(a()) //스크립트 오류로 인해 "함수 없음"이 표시됩니다.



3. 새로운 기능이 차이를 만들 수 있습니다(소문자 기능)
(1), 단순 빈 기능

코드 복사 코드는 다음과 같습니다.
var func = new function() { };alert(typeof (func));
alert(func); //[객체 객체]
//alert(func()); //스크립트 오류 func는 함수가 아닙니다.



실제로 위의 코드는 다음의 Write 메소드와 동일합니다.


function anonymousClass() { } //익명 클래스
var instance = new anonymousClass()
alert(typeof (instance));//object
alert(instance); [객체 객체]

[code]

(2) 이 함수에는 이해하기 어렵지 않은 반환 값이 있습니다. function() { return "jeff wong" };
alert( typeof (func))
alert(func)
//alert(func()); >



사실 위의 코드는 다음과 같이 작성하면 같습니다.



코드를 복사하세요
코드는 다음과 같습니다. functiononymousClass() { return "jeff wong" } //Anonymous classvar instance = new anonymousClass()alert; (typeof (인스턴스));//object
alert(instance); //[ object Object]



(3), 함수에는 여전히 반환 값이 있습니다. 메소드가 약간 다릅니다

다음 코드와 (2) 의 차이점에 주의하세요. 다음으로 집중하고 싶은 것은 약간 다른 쓰기 형식이기 때문입니다.




코드 복사
코드는 다음과 같습니다. var func = new function() { return new String("jeff wong") ; }; alert(typeof (func)); //객체 예상 alert(func); //여기에?!alert(func()); 🎜>


위 코드의 등가 형식은 여전히 ​​간단합니다.



코드 복사


코드는 다음과 같습니다.

실행해보고 결과를 보셨나요? 맞습니다. 세 번째 작성 방법에서는 func이나 인스턴스를 팝업할 때 예기치 않게 "jeff wong"이라는 문자열이 표시됩니다. (2)와 (3)의 코드를 잘 비교해 보면 return의 작성 방식이 약간 다른 점을 제외하면 두 코드는 거의 동일하므로 우리의 함수를 만드는 것이 new String의 형태임에는 의심의 여지가 없다는 것을 유추할 수 있습니다. 예상치 못한 효과를 생성합니다. 왜 이런 일이 발생합니까?

JavaScript에서는 new 표현식 뒤의 생성자가 기본 유형을 반환(반환)하는 한(반환이 없는 경우 실제로는 (1)과 같이 정의되지 않은 기본 유형을 반환함) (2) 쓰기 방법과 같이 new로 생성된 익명 객체가 반환되고, new 표현식 뒤의 생성자가 객체(Object), 함수(function), 배열(Array)과 같은 참조 객체를 반환하면; ) 등을 사용하면 반환된 참조 객체는 new로 생성된 익명 객체를 덮어씁니다. 이제 (3)의 쓰기를 분석해 보겠습니다. new String은 문자열 참조 객체를 구성하므로 new가 생성한 익명 객체를 포함하고 new String이 가리키는 참조 값은 "jeff wong"이므로 팝업은 다음과 같습니다. 불가피합니다. 현재 새 문자열에 의해 할당된 값입니다.

마지막으로 생각해 볼 질문을 남겨주세요.

코드 복사 코드는 다음과 같습니다.

var func = new function() { var str = new String("jeff wong");//다른 방법으로 작성하세요
// Alert(typeof (func)); //객체가 예상됩니다
alert(func); //여기서 결과가 어떻게 나올지 추측해 보세요.

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