August 14, 2019
javascript의 가장 큰 특징중의 하나는 single-threaded 언어라는 점이다.
javascript의 엔진은 한 번에 한 가지 일밖에 하지 못한다. 즉, 단일 호출스택을 갖고 있다.

자바스크립트의 엔진은 브라우저가 제공하는 웹 API 즉, DOM, AJAX, SetTimeout 을 사용한다.

자료(데이터)가 하나의 방향으로만 삽입되고 삭제되는 방식의 구조(Last In First Out(LIFO), 후입선출 구조)
function multiply(x, y) {
return x * y;
}
function printSquare(x) {
var s = multiply(x, x);
console.log(s);
}
printSquare(5);
function foo(b) {
var a = 5;
return a * b + 10;
}
function bar(x) {
var y = 3;
return foo(x * y);
}
console.log(bar(6));const sec = 3000;
function callMe() {
setTimeout(function timeout() {
console.log('hi');
foo();
}, sec);
}
function foo() {
setTimeout(function timeout() {
bar();
console.log('solomon!!');
}, sec);
}
function bar() {
setTimeout(function timeout() {
console.log('juchan!!');
}, sec);
}
callMe();
/*
visualize code
(http://latentflip.com/loupe/?code=Y29uc3Qgc2VjID0gNDAwMDsKCmZ1bmN0aW9uIGNhbGxGaXJzdCgpIHsKICBzZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXQoKSB7CiAgICBjb25zb2xlLmxvZygnaGknKTsKICAgIGNhbGxTZWNvbmQoKTsKICB9LCBzZWMpOwp9CgpmdW5jdGlvbiBjYWxsU2Vjb25kKCkgewogIHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZW91dCgpIHsKICAgIGNvbnNvbGUubG9nKCdteSBuYW1lIGlzJyk7CiAgICBjYWxsVGhpcmQoKTsKICB9LCBzZWMpOwp9CgpmdW5jdGlvbiBjYWxsVGhpcmQoKSB7CiAgc2V0VGltZW91dChmdW5jdGlvbiB0aW1lb3V0KCkgewogICAgY29uc29sZS5sb2coJ2p1Y2hhbiEhJyk7CiAgfSwgc2VjKTsKfQoKY2FsbEZpcnN0KCk7Cg%3D%3D!!!PGJ1dHRvbj5DbGljayBtZSE8L2J1dHRvbj4%3D)
*/function first() {
setTimeout(function timeout() {
console.log("The First function has been called.")
}, 1000)
}
function second() {
setTimeout(function timeout() {
console.log("The Second function has been called.")
}, 999)
}
first();
second();for (var i = 0; i < 5; i++) {
setTimeout(function timeout() {
console.log(i)
}, 0)
}
//결과 값?추가로 알아두면 좋은 개념들
자바스크립트의 실행 컨텍스트
함수의 범위, 스코프(scope)
자바스크립트 - 실행 컨텍스트와 스코프
- (참조 : https://blog.sonim1.com/135)