2011-12-08 8 views
2

나는이액세스 자바 스크립트 변수

// script1.js 

jQuery(document).ready(function($) { 
    var somevar; 
    $('somelem').myPlugin(); 
}); 


// script2.js 

(function($) { 
    $.fn.myPlugin = function(options) { 

     // access and modify 'somevar' here so that it gets modified 
     // in the function which called a plugin 

    }; 
}); 
  • 내가 '의 somevar'변수는 플러그인에 의해 수정 얻을 내가 에 더 이미 수정 된 변수와 함께 작동 할 수있을 것입니다 원하는 다음과 같은 구조 플러그인 호출자 함수의 범위입니다.
  • 전역 변수를 사용하고 싶지 않습니다.
  • 은 플러그인 함수에 로컬이되고 수정하면 은 내가 알기에 원래 변수를 수정하지 않으므로 변수를 플러그인에 옵션으로 전달하지 않습니다.
  • 자바 스크립트가 작동하는 방식에 대한 개념이 잘못 이해 될 수 있으므로 답변에 감사드립니다.
+0

자바 스크립트의 범위는 매우 복잡 할 수 있으며, 내가 jQuery를 사용하지 않는,하지만 나에게 그것은의 somevar 변수는 지역 범위가 같다 익명의 함수에 포함되어 있기 때문에 'var'로 인스턴스화했습니다. –

+0

@jayp 물론이 지역입니다. 그것은 실제로 문제가되는 문제입니다. 나는 그것을 세계화하고 싶지 않다. 글로벌하게 만들면 문제는 해결되지만 IE에서 메모리 누수가 발생합니다. 왜냐하면 'somevar'는 실제 스크립트에서 많은 양의 데이터를 처리하고 IE는 올바르게 관리하지 못하기 때문입니다. – noname

+1

이것 좀 봐 -> http://stackoverflow.com/questions/1830496/jquery-make-global-variable-available-to-multiple-plugins – ManseUK

답변

2

에 매개 변수로 콜백을 전달할 수 있었다 , 값으로 전달됩니다. 그러나 객체를 전달하면 참조로 전달됩니다. 그래서, 당신은 그렇게 할 수 -

jQuery(document).ready(function($) { 
    var somevar = {val: 5}; 
    $(document).myPlugin(somevar); 
    alert(somevar.val); 
}); 


// script2.js 

(function($) { 
    $.fn.myPlugin = function(options) { 
     options.val ++; 
     // access and modify 'somevar' here so that it gets modified 
     // in the function which called a plugin 

    }; 
})(jQuery); 

라이브 데모를 :: 참조 http://jsfiddle.net/rifat/EdRFm/

+0

예상대로 작동합니다. 고마워. – noname

-1

변수에서 값을 설정하고 다른 스크립트에서 호출하는 함수를 작성할 수 있습니다.

//script1.js 

var somevar; 

function setSomevar(value){ 
somevar = value; 
} 

function getSomevar(){ 
return somevar; 
} 

jQuery(document).ready(function($) { 
$('somelem').myPlugin(); 
}); 

이제 setSomevar 함수를 호출하고이 값을 variable에 전달할 수 있습니다. 도움이 되었기를 바랍니다. 친애하는.

+1

이것은 전역 변수를 만들고 함수 내에서 값을 변경합니다. –

0

전역 변수에 대한 싱글 톤 클래스를 만들 수 있습니다.

0

당신은 플러그인 함수가 값을 반환하자

somevar = $('someelem').myPlugin(); 

을의 somevar하는 것을 지정 아니면 기본 유형을 통과하면 당신은 당신의 플러그인 방식

// Script 1 
var somevar; 
$('someelem').myPlugin(function(newValue) { 
    somevar = newValue; 
}); 

// Script 2 
$.fn.myPlugin = function(callback) { 
    ... 
    callback(newValueForSomeVar); 
}