2009-12-03 5 views
6

의 포인터로 매개 변수를 전달 :다음 코드를 살펴보세요 자바 스크립트

var o; 

(function (p) { 
    p = function() { 
     alert('test'); 
    }; 
})(o); 

o(); // Error: 'o is not a function' 

나는 하나 개의 매개 변수를 익명 함수를 작성하고 위의 함수에서를하는 이전에 생성과 자기를 발동 매개 변수로 전달 된 개체 그럼이 객체를 새로운 스코프 내부에서 함수로 지정하고 궁극적으로 외부에서 호출하려고합니다.

제 질문은 포인터가 가리키는 포인터를 변경하는 것과 관련하여 '참조로'인수를 어떻게 전달할 수 있습니까?

답변

12

당신은 자바 스크립트가 참조로 객체를 전달한다는 사실을 활용하여 원하는 효과를 얻을 수 있습니다 : 당신이 당신의 예에서 변수 O를 통과하면

var o = { }; 

(function (p) { 
    p.fn = function() { 
     alert('test'); 
    }; 
})(o); 

o.fn(); 
+6

사실 "참조로 전달"은 JavaScript에서 약간의 잘못된 표현입니다. 참 "참조"유형을 가진 다른 언어와 비교하여 JavaScript는 참조로 아무것도 전달하지 않습니다. 그것은 항상 가치에 의해 전달됩니다. 그 가치는 참조를 보유 할 수도 있습니다. 이것은 당신이 말하려고하는 것입니다. –

1

, 당신은 정의되지 않은 값을하지 전달하는을 무엇이든에 참고. 당신이해야 할 일은 부모에게 객체를 보내는 것입니다. 이 경우 창 개체 (브라우저를 사용한다고 가정).

(function (p, name) { 
    p[name] = function() { 
     alert('test'); 
    }; 
})(window, "o"); 
o(); 

이 값은 창 개체와 새 함수의 이름을 전달합니다. 그런 다음 함수를 창에 할당하고 이제 호출 할 수 있습니다. 하지만 클로저를 사용하지 않는다면 함수를 직접 할당하는 것이 좋습니다.

function o() { 
    alert('test'); 
}; 
o(); 
3

는 당신은 원칙의 다른 세트에 따라 구성된 언어로 이해 숙어에 맞게 구부리려고 노력보다는 의도 한대로 언어를 사용하는 것이 더 낫다.

var o = (function(p) { 
    return function() { 
     alert('test'); 
    }; 
})(); 

o(); 
+0

위의 관용구를 사용하는 이유는 기본 객체 ('o')의 이름을 변경하려면 첫 번째 행 ('var o;')에서 변경해야하기 때문입니다. 매개 변수 ('}) (o)로 전달하는 부분에서';); 익명의 기능에서 아무것도 변경할 필요가 없습니다. –

관련 문제