2016-11-26 1 views
0

전역 변수는 나쁜 습관으로 간주되지만, 일종의 간단한 "싱글 톤"값으로 사용하고 싶습니다.node.js : 익명 함수 내에서 전역 변수를 설정하는 방법은 무엇입니까?

다음은 NodeJS의 전역 범위에서 변수를 선언하는 세 가지 다른 방법이 포함되어 있습니다 (필자 생각). 함수 change2()는 값을 "... one"에서 "... two"로 변경하는 데 성공합니다. 그러나 function change3()은 "... three"로 설정할 때 성공하지 못합니다.

익명 함수 내에서 전역 변수의 값을 변경하려면 어떻게해야합니까? 또한 아무런 효과가없는 setter 메서드를 호출 해 보았습니다. bind() 호출은 단지 무력한 추측 일뿐입니다.

global.v1 = 'v1: one'; 
    var v2 = 'v2: one'; 
    v3 = 'v3: one'; 

    function change2() { 
     global.v1 = 'v1: two'; 
     v2 = 'v2: two'; 
     v3 = 'v3: two'; 
    }; 

    function change3() { 
     (function() { 
      global.v1 = 'v1: three'; 
      v2 = 'v2: three'; 
      v3 = 'v3: three'; 
     }).bind({v1:v1, v2:v2, v3:v3}); 
    }; 

    console.log (v1, v2, v3); 
    change2(); 
    console.log (v1, v2, v3); 
    change3(); 
    console.log (v1, v2, v3); 

출력은 다음과 같습니다 당신이 실제로 내부 기능을 실행하지

O:\node>node scope 
v1: one v2: one v3: one 
v1: two v2: two v3: two 
v1: two v2: two v3: two 

O:\node> 
+1

되지 직접적인 대답하지만, 내용의'의 module.exports = 가진 파일 "v1.js는"{}'간단한 싱글을위한 더 나은 작동합니다. 다른 모듈에서는 간단하게'require ('./v1')'를 사용하십시오. –

+0

'change3()'에서는 내부 함수를 실제로 실행하지 않습니다. '.bind()'는 단지 새로운 함수를 리턴하지만 실제로 호출하지는 않는다. – jfriend00

+0

감사합니다. @ jfriend00을 스포팅했습니다. '.bind (...)'를 단지'()'로 바꾸면 호출이 시작되고 "... three"가 설정됩니다. –

답변

1

change3()에서. .bind()은 새 함수를 반환하지만 실제로는 새 함수를 호출하지 않습니다. 당신을 도움이되지 않는 당신도 여기에 .bind() 필요하지 않습니다,

function change3() { 
    (function() { 
     global.v1 = 'v1: three'; 
     v2 = 'v2: three'; 
     v3 = 'v3: three'; 
    }).bind({v1:v1, v2:v2, v3:v3})(); // add parens at the end here 
}; 

을하지만 : 당신이 그것을 호출 할 경우

, 당신은 .bind() 후 괄호를 추가해야 할 것이다.

function change3() { 
    (function() { 
     global.v1 = 'v1: three'; 
     v2 = 'v2: three'; 
     v3 = 'v3: three'; 
    })(); // add parens at the end here 
}; 
관련 문제