네트워킹 요청이나 이미지 프로세싱은 느리다
느린 동작이 스택에 남아있는 것을 보통 블로킹이라 한다
이벤트 루프의 역할,
stack이 비어있는 지 확인후 (main까지 비어있어야해)
task queue에 있는 콜백을 순차적으로 넘긴다. (callback queue라고도 한다)
이 이유로 0초로 셋팅된 비동기 함수의 콜백도 마지막에 실행되는 것이다!
v8은 js가 실행되는 곳이며,
webapi에서 비동기적으로 구동된다.
그리고 webapi는 c++로 구현돼 있다.
debugger;
console.log('hi');
setTimeout(()=>{console.log('there')},2000);
console.log('JSConfEU');
console.log('hi');
setTimeout(()=>{console.log('there')},0);
console.log('JSConfEU');
setTimeout(()=>{console.log('cb 01')},800);
setTimeout(()=>{console.log('cb 02')},800);
setTimeout(()=>{console.log('cb 03')},800);
setTimeout(()=>{console.log('cb 04')},800);
호이스팅시
선언문은 다 올라가고
표현식은 선언부만 올라가고, 구현부(할당)은 그 자리에 있다.
때문에 선언문은 어느 위치에 있던, 호출이 된다.
반대로 말하면, 어디서 이 함수가 실행되고, 어떤 함수가 실행된 것인지
예측이 불가능하기에 디버깅하기 어렵다.
함수선언문은 즉시실행함수나, 콜백함수에 대입하는 익명함수 등에 필요하나,
그 이외의 모든 경우는 함수표현식으로만 해도 된다.
arr.forEach(callback[, thisArg])
[]는 생략가능하다는 메타 표기법이야
function sum(arg1, arg2){
return arg1+arg2;
}
sum.apply; //ƒ apply() { [native code] }
(함수도 객체라는 물증)
native 코드는 브라우저 api라는 뜻으로..
내장객체이기 때문에 내부 소스를 보여주지 않는다는 뜻
function sum(arg1, arg2){
return arg1+arg2;
}
sum.apply(null, [1,2]); // 이것과 sum(1,2)는 같다.
이렇게 쓰면 안돼는거야 읽히지도 않아,
null이 아니라 다른 것을 넣으라고 있는 함수.
object도 트리 구조마냥 더 나뉘는 것으로 보인다.
예를들어 일반적인 object에 . 찍었을때 나오는 메서드랑
var regexp = /app/;
이런 정규표현식에서 제공하는 메서드가 다르다.
리터럴 : 객체를 명시적으로 만드드는 것보다 편리한 문법
함수 리터럴
var sum = (x,y)=>{return x+y};
var sum = new Function ('x', 'y', 'return x+y;');
var o = {}; // new Object
var a = [1,2,3]; // new Array(1,2,3);
if문과 switch문은 서로 대체제 관계이다,
if문이 범용적으로 쓰기 좋으나,
특정 조건에서는 switch문이 일목 요연하게 표현할 수 있다.
apply나 call은 ecmascipt에 정의된 js 표준 api야.
객체랑 메소드는 일반적으로 master, slave와 같은 관계이나.(통상적인 객체지향 개념)
js에서는 함수도 하나의 객체이며,
apply를 이용하여 자유자제로 객체를 바꿀 수 있다.
var o = {}
var p = {}
function func(){
switch(this){
case o:
document.write('o<br />');
break;
case p:
document.write('p<br />');
break;
case window:
document.write('window<br />');
break;
}
}
func();
func.apply(o);
func.apply(p);
'Front-end > Vanilla JS' 카테고리의 다른 글
newlecture: js es5 브라우저 플랫폼 2 : 노드 다루기 (0) | 2021.05.02 |
---|---|
newlecture: js es5 브라우저 플랫폼 (0) | 2021.05.01 |
생코_jquery_메모 (0) | 2021.03.24 |
newlecture: js es5 순수언어 part (0) | 2020.11.12 |
youtube 총 재생 시간 구하기 @@ !! (0) | 2020.11.11 |
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!