이것은 간단한 질문입니다.JS 전역 변수와 지역 변수
전역 변수가 함수 외부에서 선언 될 때 생성된다는 것을 알고 있습니다 (w3schools.com).
내 질문은 전역 변수를 만들고 함수에서 편집하면 로컬이됩니까? 함수에 의해 주어진 새로운 값이 전역 값이됩니까?
이것은 간단한 질문입니다.JS 전역 변수와 지역 변수
전역 변수가 함수 외부에서 선언 될 때 생성된다는 것을 알고 있습니다 (w3schools.com).
내 질문은 전역 변수를 만들고 함수에서 편집하면 로컬이됩니까? 함수에 의해 주어진 새로운 값이 전역 값이됩니까?
, 아니, 세계를 편집하는 것은 지역하지 않습니다
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
새 값은 전역 값이됩니다.
아니요, 글로벌 변수를 편집해도 변수의 범위가 변경되지 않습니다. 할당 된 새 값이 전역 값이됩니다. 일반적으로
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'
'var myGlobal' 대신에'window.myGlobal = 'foo''를 선호합니다. 왜냐하면'var'의 사용은 함수 밖에서 오해의 소지가 있기 때문입니다. (이것은 어휘 변수가 아니라 속성이고, 같은 마감 규칙으로 작업) –
@pst가 편집되었습니다 :) – jbabey
http://w3fools.com – SLaks
왜 당신이 그것을 테스트 해달라고 : 우리가 (대신 멤버 변수의) 객체 전체를 덮어하려고하면, 함수는 단순히 원래의 객체에 대한 참조를 잃는다? 그것을 바보로 간직하십시오 :) – Jashwant