Primitive type data의 선언 - setTimeOut 함수 실행 타이밍
function foo () {
var data = 10;
bar(function (players) {
data = players;
});
return data;
}
function bar (callback) {
callback(20);
}
var result = foo(); // result === 20; callback 함수를 실행하면서 data라는 전역변수 값을 20으로 바꿔준다.
function foo () {
var data = 10;
bar(function (players) {
data = players;
});
return data;
}
function bar (callback) {
setTimeout(function () {
callback(20);
}, 500);
}
var result = foo();
/*
foo() 실행 시, bar 내의 setTimeout으로 callback 함수가 태스크 큐에 넘어간다.
callback 함수가 500ms 이후 실행되기 전에 return data를 하여, var result = 10;으로 선언된다.
*/
Reference Type
주소값의 직접 변경
var myArray = [2, 3, 4, 5];
function doStuff(arr) {
arr[2] = 25;
}
doStuff(myArray);
/*
function doStuff의 parameter에는 myArray의 주소값이 대입되고, myArray[2]는 [2, 3, 25, 5]로 바뀐다.
주소값 자체에서 값을 바꿔주었기 때문에 myArray가 변한다.
주소값이 변경되지 않는 경우1
var myArray = [2, 3, 4, 5];
function doStuff(arr) {
arr = [ ];
}
doStuff(myArray);
/*
doStuff의 parameter로 myArray의 주소값이 대입되지만,
arr = [ ];에서 실제 주소값을 변경시키진 않는다.
arr라고 하는 변수의 값이이 비어있는 배열의 주소값을 바라보게 하는 코드이다.
결국 myArray는 원래의 값을 그대로 가지고 있게 된다.
myArray = [2, 3, 4, 5]
주소값이 변경되지 않는 경우2
var player = { score: 3 };
function doStuff(obj) {
obj.score = 2;
obj = undefined;
}
doStuff(player);
/*
doStuff(player)를 실행하면,
parameter로써 player의 주소값이 대입된다.
이 후 function 내에서, 주소값의 key가 score인 value를 2로 바꿔준다.
그 다음 줄의 obj = undefined; 는 obj 라고 하는 변수가 undefined라고 선언하는 것이 된다.
결국 player는 원래의 값을 그대로 갖고 있게 된다.
입력한 주소값이 함수 내의 변수와 무관한 경우
var player = { score: 3 };
function doStuff(obj) {
obj = {};
}
player = doStuff(player); // player는 undefined
// doStuff에 player가 가리키는 주소값이 대입된다.
//이 후 함수 내에서는 obj라고 하는 변수가 {}의 주소값을 가리키게 한다.
//하지만 이 후 obj라는 변수를 return 해주지 않았으므로,
//함수 실행의 결과는 undefined가 된다.
//결국, player = undefined와 같은 뜻이 된다.
이머시브 2주차 5일 - Intro Web Architecture (0) | 2019.06.08 |
---|---|
Inheritance Pattern - Javascript (0) | 2019.06.04 |
Object.create & prototype - Javascript (0) | 2019.05.29 |
Data structure part.2 - Javascript (0) | 2019.05.29 |
Data structure part.1 - Javascript (0) | 2019.05.29 |
댓글 영역