2013-06-18 3 views
3

전역 변수를 함수의 매개 변수로 설정하여 변경하려고합니다. 내가 겪고있는 문제는 로컬 변수를 변경할 때 전역 변수가 변경되지 않는다는 것입니다. 나는 변수의 범위가이 문제의 원인이라는 것을 알고 있지만 어떻게 작동시키는 지 모르겠습니다. 사용자가 사업부를 클릭하면, 그것은 onClick 이벤트에 설정된 부울 전역 변수를 전환하도록로컬 변수로 전역 변수 값 변경

var blnUpgradeGlobal; 

    function SelectUpgrade(strUpgradeName, blnUpgradeLocal) { 
     if (blnUpgradeLocal) { 
      blnUpgradeLocal= false; 
      $("#" + strUpgradeName).css("background-color", "#EAC300") 
     } 
     else { 
      blnUpgradeLocal= true; 
      $("#" + strUpgradeName).css("background-color", "Lime") 
     } 
    } 

<div id="Upgrade1" onclick="SelectUpgrade(this.id, blnUpgradeGlobal)"> 
Content 
</div> 

그래서 내가 여기 달성하기 위해 노력하고있어 것은 : 여기에 내가 사용하고 코드입니다. 함수에 정확한 변수를 지정하고 싶지는 않습니다. 그 이유는 많은 중첩 된 if 문이 있기 때문에 큰 중첩 if 문을 작성해야하기 때문입니다.

미리 감사드립니다.

+0

당신이 함수 매개 변수로 설정하면 - 그것은 것 로컬 변수로 취급되고 글로벌 변수는 변경되지 않습니다! – alfasin

+0

'blnUpgradeGlobal'은 다른 곳에서 사용 되었습니까? 즉, 값으로 초기화 되었습니까? – Nolo

+0

@Nolo, 자바 스크립트의 정의 된 변수는 모두 '정의되지 않음'으로 초기화됩니다. 이는 위증입니다. – kay

답변

3

2 개 가지 옵션이 있습니다

  1. 변경 (blnUpgradeLocal에서 뭔가 다른) 두 번째 매개 변수 이름 함수 선언에서

  2. 변경 전역 변수 값 window.blnUpgradeGlobal 참조를 사용

전자가 더 우수

+1

3.그 변수를 인수로 전달하지 마십시오.) – alfasin

+0

그러나 후자의 경우, 의도적으로 그 값을 변경했으며 현재 수행중인 작업 (알고있는 경우 글로벌 변수 사용시 수행중인 작업) –

+1

@alfasin : the third 그리고 최악 :-) – zerkms

3

전역 변수는 코드의 아무 곳에서나 액세스하고 변경할 수 있습니다.
매개 변수를 제거한 다음 사용하십시오.
은 무엇 일어나고있는 것은 당신이 세계의 가치를 전달하지만, 로컬 네임 스페이스가 먼저 검색되기 때문에 단지 나는의 정확한 변수를 지정하지 않으

+1

물론 그것은 ** 글로벌 변수의 요점이 아닙니다 **. 그들의 요점은 응용 프로그램 전체에 걸쳐 동일한 값을 갖는 것입니다 ... 함수에 대한 매개 변수를 갖는 지름길이 아닙니다. – Brad

+0

@ 브래드 그건 내 진술을 해석하는 의미가 아니야, 내가 어떻게 바꿀 것인지 제안 해 주겠어. – aaronman

+0

전체 첫 줄을 버릴거야. 무슨 일이 일어나고 있는지를 설명하는 것은 좋지만, 함수 내에서 전역 변수가 반드시 액세스되지 않아야하는 경우가 종종 있습니다. 이처럼 사소한 일에 대해서는 아마 어느 쪽의 문제도 아닙니다. – Brad

0

지역 VAR의 값을 변경하는 것입니다 왜냐하면 나는 많은 중첩 된 if 문을 작성해야하기 때문이다.

그런 다음 모든 전역 변수가 객체에 래핑되도록하는 것이 가장 좋습니다 (글로벌 네임 스페이스에서 오염이 적습니다.). 이런 식으로 뭔가 :

var globalVars = { 
    foo: true, 
    bar: 1, 
    baz: 'foo' 
}; 

그런 다음, 함수에 그냥 객체를 참조 (이 글로벌 아니라면 당신은 대신을 통과 할 수 있습니다) :

function doStuff(glb) { 
    glb.foo = false; 
    glb.bar = 2; 
} 
doStuff(globalVars); 
+0

의견을 보내 주셔서 감사합니다. 내가 직면하고있는 문제는 사용자가 클릭 할 때 어떤 전역 변수가 변경 될지 알 수 없다는 것입니다. 한 번에 전역 변수 중 하나만 변경하려고합니다. – Vandel212

+0

아, 미안하지만, 나는 오해하고있다. 이제, zerkms의 대답을 고려해 보면 변수 이름을 문자열로 전달하고'window [varname]'을 통해 액세스 할 수 있습니까? – bfavaretto