먼저 간단한 코드를 살펴보겠습니다.
var testFun=function ( name,age){
var job='Flash Development';
return new testFun.init(name,age,job)
}
testFun.init= function(name,age,job) ){
return 'name:' name ',age:' age ',job:' job ''
}
alert(testFun('vincent',30; )); //[object Object ]
코드는 매우 간단합니다. testFun 변수는 익명 함수이고 익명 함수는 testFun.init 객체(또한 익명 함수)를 반환합니다. 그러나 일부 초보자의 경우 testFun이 반환된 testFun.init 개체라고 오해하는 경우가 있습니다. 익명 함수 함수(이름, 나이)를 구성하는 과정에서 testFun이 다시 사용되었다고 생각할 수도 있습니다. 이때 testFun은 아직 빌드 중이므로 아직 존재해서는 안 되며 testFun.init도 존재하지 않는데 어떻게 testFun을 사용할 수 있습니까? init는 어떻습니까?
사실 이렇게 생각하면 오해가 있습니다. testFun은 testFun()과 동일합니다. testFun이 반환된 testFun.init 객체라면 코드는 testFun=function이어야 합니다. (이름,나이) {… …}(). 올바른 이해는 다음과 같습니다. testFun은 함수를 할당하면 이미 존재합니다. 함수가 정의되지 않거나 null을 반환하더라도 testFun()이 실행된 후에만 반환됩니다. 값이 정의되지 않았거나 null입니다. 반환 값은 testFun() 실행의 결과입니다. 결과가 반환된 후에는 더 이상 testFun과 관련이 없습니다. 예:
var testFun=function() {
return un Defined;
}
var result=testFun();
alert(testFun); // function () {return undefine;}
alert(result); 결과가 testFun과 다릅니다. 더 이상 관계가 없습니다
따라서 testFun에 익명 함수가 할당되면 다른 값이 할당될 때까지 항상 존재합니다. 다음과 같이 간단하게 testFun.init를 이해할 수 있습니다:
testFun.init=function(name,age){}.init=function(name,age.job){… …}
요약하자면, 되돌아보면, testFun은 함수이고 testFun()은 (function(name,age,job){return 'name:' name ',age:' age ',job:' job ''; })()
순서입니다. 이해를 돕기 위해 코드를 다음과 같이 단순화할 수 있습니다.
var testFun=function(){}
testFun.init=function(){}
testFun()이 testFun.init 객체를 반환하지 않는다는 것뿐입니다.