2013-06-28 4 views
4

아래의 후크 기능에서 전역 변수 'x'를 사용하고 싶습니다.자바 스크립트에서 함수 후크에서 전역 변수에 액세스하는 방법?

var x = 10; //global variable 

var oldA = a;  

a = function a(param){ 

    alert(x);  //showing error: x is undefined 

    return oldA(param); 

} 

오류를 해결하는 방법?

+0

당신이 [범위 지정 및 ㅏ] 주위를 둘러해야한다 (http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html) – Praveen

+0

user1671639 @ :에 할당 된 기능을'A'는 수 _cannot 그것을 표현으로 여기에 올랐다. 여기에 올리는 유일한 것은 변수 선언입니다 –

+0

'node' 환경에 있습니까? 이 경우'global.x = 10;'&'alert (global.x)'를 시도하십시오. 사실, 지구 적 대상을 오염시키는 것은 좋은 생각이 아닙니다. 그러나, 당신은 그것을 시도하고 싶을지도 모르다. –

답변

9

코드가 제대로 작동하지만 window.x을 사용하여 x을 전역 변수로 명시 적으로 변환 할 수 있습니다.

(window || root || global || GLOBAL || this || self || {x: undefined).x 

{x:undefined} 객체 리터럴 그냥 표현이 오류를 throw하지 않습니다 있는지 확인하는 것입니다 : 브라우저 환경, 또는 전역 객체가 window를 호출되지 않은 환경에서 시도하지
.
나는 (엄밀히 말해서 이름이없는) 전역 객체에 주어진 모든 이름을 거의 나열했습니다. 단지 여러분의 경우에 적용될 수있는 것을 사용하십시오. 한편

, 글로벌 변수가 x 시간에 의해 기능 ( a)를 재 할당 할 수있는 경우 호출되는, 폐쇄는 것이 바람직 할 것입니다 : 물론

a = (function (globalX) 
{ 
    return function a(param) 
    { 
     console.log(globalX); 
     return oldA(param); 
    }; 
}(x || window.x));//pass reference to x, or window.x if x is undefined to the scope 

, 당신이 있다면 엄격 모드에서는 암시 적 전역에도주의해야합니다.
그게 내가 생각하기에 당신 코드에 문제가있는 것 같아요. 더 자세한 내용은 실제로 일어나는 일에 대한 단서를 우리에게 제공 할 수 있습니다 ...

+0

폐쇄와 내 실수를 고쳐 주셔서 감사 +1 :) – Praveen

+0

@ user1671639 : thx. 그리고 저는 여러분의 코멘트를 실수로 말하지 않을 것입니다. 왜냐하면 변수 선언이 결국에는 들었기 때문입니다. OP의 스 니펫을 그대로 사용하면'oldA'는'undefined '가되고'oldA (param)'은 오류를 던질 것입니다. 호이스트에 링크가있는 OP를 제공하는 것은 좋은 방법입니다. –

+0

@EliasVanOotegem '(루트 || 창)'은 mozilla firefox 콘솔에 오류를 발생시킵니다. 'ReferenceError : root is not defined' –

0

함수 내에서 전역 Js 변수에 액세스하려면 Var를 사용하지 마십시오. 함수 범위와 전역 범위에서 var 언급. 예 : 또한

<script> 
    var foo = "hello"; 
    function fxn() { 
     alert(foo); 
     foo = "bai"; 
    } 
    fxn(); 

    alert(foo+"out side");</script> 
<script> 
관련 문제