2012-06-25 5 views
0

I로 난 변경 처리 기능없이 기준으로서 값 유형을 전달해야하는 일부 시나리오했다.자바 스크립트, 치형 참조

  1. 예 숫자 타입 (VAR 제한)

    var limit = 0; // Need to be the reference type 
    var multiCallback = new MultiCallback(limit, function(){}); 
    for (element in myObject) 
    { 
        limit++; 
        element.DoSomething(multiCallback.callback); 
    } 
    
    function MultiCallback(limit, func) 
    { 
        var calls = 0; 
    
        function callback() 
        { 
         if (++calls == limit) 
         { 
          func(); 
         } 
        } 
    
        return { 
         callback : callback 
        } 
    } 
    
  2. Examble 기능 유형

    var resizeCallback = function(){}; 
    $(window).resize(resizeCallback); 
    
    function showPage() 
    { 
        resizeCallback = resizePage(); 
    } 
    
    function showLoader() 
    { 
        resizeCallback = resizeLoader(); 
    } 
    

가변 의지의 값을 변경하는 용액

+1

넌 (*이없이 처리 기능 * ... 변경) 할 수 없다. JavaScript의 숫자와 문자열은 변경할 수 없습니다. – Matt

+0

가능한 [자바 스크립트에서 참조로 변수 전달] (http://stackoverflow.com/questions/7744611/pass-variables-by-reference-in-javascript) –

답변

1

가 사전을 절대 업데이트하지 마라. 변수의 가치. 이 같은 것을 할 수

함수의

:

var limit = {value: 0}; 
function MultiCallback(limit, func) { 
    .... 
    if (limit.value == ++calls) ... 
} 
// Changing limit: 
limit.value = 1; 
1

어떤 패스가 없습니다 : 다른 값 (프리미티브 및 개체)

var current = function() { ... }; 
function resizeCallback() { 
    return current.apply(this, arguments); 
} 
// Updating current will work: 
current = function() { ... something ... }; 

는 가장 가까운 것은 객체를 전달하는 것입니다 javascript의 참조에 의해 (인수를 할당하는 것은 호출자에게 보이지 않습니다). 함수 예제에서 수행중인 작업은 전역 변수를 수정하는 것입니다.

하면 객체 및 객체의 돌연변이로 포장 할 호출자에게 공개 :

var limit = { 
    value: 0 
}; 
관련 문제