[study] Advanced Javascript — 2

김진석
2 min readSep 29, 2019

--

Does javascript pass variables by reference or by value? 세션 정리

자바스크립트에서 변수에 값을 전달할 때, value 또는 reference 형태로 전달합니다. 그러면 어떤 상황일 때 해당 형태로 전달되는지는 아래를 확인해 주세요.

By value

string, number, boolean 타입의 값은 value 형태로 전달하게 됩니다.

"use strict";var a = "Hello";
var b = 1;
var c = true;
function func(x, y, z) {
x = "Hi";
y = 2;
z = false;
}
func(a, b, c);
console.log(a); // "Hello"
console.log(b); // 1
console.log(c); // true

따라서 함수에 인자 값을 넘겨서 그 인자 값을 수정해도 함수 밖의 변수는 수정되지 않습니다.

By reference

object 타입의 값은 reference 형태로 전달하게 됩니다.

"use strict";var d = {
message: "Hello"
};
function func2(x) {
x.message = "Hi";
}
func2(d);
console.log(d); // {message: "Hi"}

따라서 위와 같이 함수 밖의 변수 또한 수정된 것을 알 수 있습니다.
다만 객체 안에 멤버 변수를 수정하는 것이 아닌 아예 새로운 객체를 할당 하는 것이라면 인자가 바라보고 있는 reference 값이 덮어 씌워 지기 때문에 함수 밖의 변수는 변경되지 않습니다.

"use strict";var e = {
message: "Hello"
};
function func3(x) {
x = {
status: "ok"
};
}
func3(e);
console.log(e); // {message: "Hello"}

--

--