dukDukz

[cs 지식] 동기와 비동기 본문

웹 개발/JAVASCRIPT

[cs 지식] 동기와 비동기

헤일리_HJ 2021. 9. 7. 15:10

동기와 비동기 / 동일한 기찻길


이 하나의 기찻길이 전문용어로 쓰레드
그래서 js 가 싱글 쓰레드 (기찻길 하나) 라서 비동기라는 프로그램을 쓴다, 콜백이 유독많은 이유가 이것 때문

싱글스레드가 무조건 나쁘냐?
그건 또 아니다.


//[sample.js]

let a = 1;
let b = 2;
let fn = () => {
    console.log('a');
}

function fn2(){
    console.log('b');
}

let c = 10

let o = {
    a: 1,
    b: 2
}

 

heep 이라는 공간 : 장바구니


무언가 내용을 저장하는..공간
코드를 주워 담음
let a = 1 이런거를 다 주워 담음
저 전체가 다 담아져 있음 (실행은 된 것)
실행은 됐는데... 담기만 했다.

담고 나서 사용을 한다.


console.log(a)
console.log(b)
console.log(fn)         // 함수 형태로 출력됨   [Function: fn]
console.log(fn2)        // [Function: fn2]
console.log(c)
console.log(o)


이게 왜 실행되는 걸까??

장바구니에 막 담아 놓는...
메모리에 담아 놓는다.

이 메모리라는 공간에 변수를 다 저장하는 것이다.

즉 a 라는 주소값으로 1을 저장
fn 이라는 주소값으로 저 함수를 저장

즉 메모리에 저장을 한 것

그래서 우리가 필요할 때 메모리가 저장한 a 주소에 있는 내용 출력해줘.. 이렇게 되는것

 

더보기


그런데 좀 다른것?
함수 부분의 느낌이 좀 다르다.

function fn2(){
    console.log('b)
}

언어별로 함수 표현이 다른다.
java : 함수도 객체
python : 객체도 함수다.
즉 우리가 쓰는 코드들은 호출을 하면 함수에 있는 내용이 실행이 된다.
프로그램 언어에 따라서 동작원리가 다르다
js : 함수는 곧 객체이다. 호출이 가능한 객체 (Object)

fn2()
fn()

하면 b 출력하고 a 가 출력 될 것.

 



메모리에 함수를 선언했을 때 당시에 메모리에 들어간다.
fn 과 fn2 가 들어감
사용을 하면 저 메모리 안에 있는 내용을 호출하는것.

함수라는 것은 그 안에 또 코드가 작성이 되어있음
이 내용도 메모리 안에 들어가 있다.

그래서 

function fn2(){
    console.log(b)
}
let b =2
fn2()

// 심지어 이것도 된다.
function fn2(){
    console.log(b)
}
const a=()=>{
    console.log(b)
}
let b =2
fn2()
a()


이것도 됨..
왜 되냐??
이 코드 각각이 메모리에 저장되어 있다가 호출이 되면 가져오게 되어있기 때문
글자를 읽는 순서대로 실행되는게 아니라는거!!!

메모리를 얼마나 이해하고 있냐...

그래서 network.js 의 순서를 알 수 가 없는것..

그래서 형태를 만들었다. 디자인 패턴 (MVC 패턴 같은..)

'웹 개발 > JAVASCRIPT' 카테고리의 다른 글

javascript 특수문자 입력 방지  (0) 2022.04.25
javascript 유효성 검사  (0) 2022.04.25
21.05.24 [js] switch문  (2) 2021.05.24
[js] 비구조 할당문 (깊은 복사)  (0) 2021.05.24
210511 (회원가입) 아이디 중복 체크  (0) 2021.05.11