Javascript

[JS]Scope 변수의 변화 해설

나를 혼란에 빠트린 두가지 예시

  내가 스코프에 대해서 배웠던 가장 간단한 사실.


안에서는 밖을 볼수있고 밖에서는 안을 볼수없다.

스코프를 가장 간단하게 설명할수 있지만 그만큼 예시를 보지않으면 알수가 없다.

아래의 첫번째 예제를 보면 밖에서 선언된 a,b라는 변수가 있고 첫번째 예제 함수안에는 a를 재할당 한것과 b.name를 재할당하는 식이 있다. 하지만 두번째 예제에는 함수 실행식만 있을뿐이지 인자를 받지는 않는다.

두번째 예제와 첫번째 예제가 틀린점은 함수의 파라미터가 있는것과 없는 것이다.

이 두가지 차이가 틀린 이유는 인자로 들어가느냐 안들어가느냐의 차이에 따라 값이 할당이 되는건지 아니면 그냥 값을 받아가는지가 결정되기 때문이다

그다음 중요한것은 변수의 할당에서 "Primitive type"은 바로 메모리에 할당되고 , [array, object, function]의 값은 메모리에 직접적인 값이 할당되는 것이 아니라 그 값을 가리키는 주소가 할당된다는 것이다.
따라서 스코프가 안에 있다고 밖의 값에 전혀 영향이 없진 않다는 것이다.

function test(){
a = 44;
b.name = "name changed to c";
}

var a = 33;
var b = {
name : "test object"
};

test(); // 이함수는 파라미터를 받지않고 그냥 함수를 실행시킴
		// 그러므로 a를 44로 재할당 
        // b의 값 또한 변화

console.log(a); // 44
console.log(b); //{name: "name changed to c"}
function test(a, b){
a = 44;
b.name = "name changed to c";
}

var a = 33;
var b = {
name : "test object"
};

test(a, b); // 이렇게 인자를 넣어 실행시키면
			// a의 자리에는 33이 들어간다 따라서 33 = 44 가되고 밖의 a값은 변화가없다
            // b는 호출될때 객체의 주소를 가져가기 주소의 값을 변화시키면 값도 변화가된다(주소가 같기때문)

console.log(a); // 33
console.log(b); //{name: "name changed to c"}

혹시 나같은 고민을 한 사람에게 도움이 되길 바라면서...

'Javascript' 카테고리의 다른 글

[JS]Closure에 대해  (0) 2020.08.06
[JS]Chain Scope 예시 2개  (0) 2020.08.04
[JS]Object 기본개념  (0) 2020.07.19
[JS]Object, Property, Method  (0) 2020.07.09
[0]자바스크립트 기본구조  (0) 2020.07.08