2012-06-04 6 views
2

이것은 간단한 질문입니다.JS 전역 변수와 지역 변수

전역 변수가 함수 외부에서 선언 될 때 생성된다는 것을 알고 있습니다 (w3schools.com).

내 질문은 전역 변수를 만들고 함수에서 편집하면 로컬이됩니까? 함수에 의해 주어진 새로운 값이 전역 값이됩니까?

+5

http://w3fools.com – SLaks

+0

왜 당신이 그것을 테스트 해달라고 : 우리가 (대신 멤버 변수의) 객체 전체를 덮어하려고하면, 함수는 단순히 원래의 객체에 대한 참조를 잃는다? 그것을 바보로 간직하십시오 :) – Jashwant

답변

7

, 아니, 세계를 편집하는 것은 지역하지 않습니다

var myglob = 5; 
function incGlob() { 
    myglob = myglob + 1; 
} 

incGlob(); 
console.log(myglob); // is 6 now 

을 그러나 인수로 글로벌 변수를 전달하는 경우, 인수는 로컬 복사 :

var myglob = 5; 
function incArg(myloc) { 
    myloc = myloc + 1; 
} 

incArg(myglob); 
console.log(myglob); // is still 5 

개체는 참조로 전달되므로 편집하면됩니다. 인수 변수 E 부재 변수는 전달 된 원래 객체의 멤버 변수 변경 :

var myglob = { foo:5 }; 
function editLoc(myloc) { 
    myloc.foo = 6; 
} 

editLoc(myglob); 
console.log(myglob.foo); // foo is 6 now 

마지막으로, editLoc에서 로컬 변수는 위에서 단지 참조되어 있습니다.

var myglob = { foo:5 }; 
function clobberLoc(myloc) { 
    myloc = { bar:7 }; 
} 

clobberLoc(myglob); 
console.log(myglob.foo); // myglob is unchanged... 
// ...because clobberLoc didn't alter the object, 
// it just overwrote its reference to the object stored in myglob 
3

예.

var 키워드를 사용하여 에 로컬 변수를 작성하는 경우 함수 내에을 선언하십시오.

+0

Nope. 방금 했어. 'var'은 아무것도하지 않습니다. 함수 내에서 선언 된 변수는 여전히 전역 변수를 가리 킵니다. – Bear

+0

@Bear : 아니요. 'var'는 지역 범위를 만듭니다. 데모 보여줘. – SLaks

2

새 값은 전역 값이됩니다.

5

아니요, 글로벌 변수를 편집해도 변수의 범위가 변경되지 않습니다. 할당 된 새 값이 전역 값이됩니다. 일반적으로

http://jsfiddle.net/RtnaB/

myGlobal = 'foo'; // notice no 'var' keyword, implicitly global (DON'T DO THIS) 

console.log(myGlobal); // logs 'foo' 

var myFunc = function() { 
    myGlobal = 'bar'; 
}; 

myFunc(); 

console.log(myGlobal); // logs 'bar' 
+1

'var myGlobal' 대신에'window.myGlobal = 'foo''를 선호합니다. 왜냐하면'var'의 사용은 함수 밖에서 오해의 소지가 있기 때문입니다. (이것은 어휘 변수가 아니라 속성이고, 같은 마감 규칙으로 작업) –

+1

@pst가 편집되었습니다 :) – jbabey