전역 변수는 나쁜 습관으로 간주되지만, 일종의 간단한 "싱글 톤"값으로 사용하고 싶습니다.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>
되지 직접적인 대답하지만, 내용의'의 module.exports = 가진 파일 "v1.js는"{}'간단한 싱글을위한 더 나은 작동합니다. 다른 모듈에서는 간단하게'require ('./v1')'를 사용하십시오. –
'change3()'에서는 내부 함수를 실제로 실행하지 않습니다. '.bind()'는 단지 새로운 함수를 리턴하지만 실제로 호출하지는 않는다. – jfriend00
감사합니다. @ jfriend00을 스포팅했습니다. '.bind (...)'를 단지'()'로 바꾸면 호출이 시작되고 "... three"가 설정됩니다. –