MDN/개발자를 위한 웹 기술/JavaScript/JavaScript 안내서/함수/범위와 함수스택/중첩된 함수와 클로저
 
 
내부 함수는 클로저를 형성하기 때문에, 여러분은 외부 함수를 호출하고, 외부 및 내부 함수 모두에 인수를 지정할 수 있습니다.
 
function outside(x) {
  function inside(y) {
    return x + y;
  }
  return inside;
}
fn_inside = outside(3); //  Think of it like: give me a function that adds 3 to whatever you give it
result = fn_inside(5); // 8

result1 = outside(3)(5); // 8

 

 

원시자료형 참조자료형
string, number, boolea, undefined, null & bigint, symbol 배열( [] ), 객체( {} ), 함수( function(){} )
데이터 보관함 한 칸(=변수)에 하나의 데이터만 넣을 수 있음 변수에 데이터(데이터 보관함, heap)의 주소를 담는다.
값 자체에 대한 변경이 불가능하지만, 변수에 다른 데이터를 할당할 수는 있다. (const 키워드로 선언하면, 재할당 불가)  
고정된 데이터 공간을 사용 데이터 사이즈가 동적으로 변함 
보관되는 데이터의 양이 엄청날 수 있음. 
결론: 변수에는 원시값 혹은 주소만 지정할 수 있고,
원시자료형이 할당될 떄는 변수에 값 자체가 담기고 참조자료형이 할당될 때는 보관함의 주소가 담긴다
let score = 80;
function doStuff(value) {
  value = 90;
}

doStuff(score)

다음 코드가 실행된 후, score의 값은? 답: 80
let player = { score: 3 };
function doStuff(obj) { 
  obj.score = 2;
}

doStuff(player);

다음 코드가 실행된 후, player.score의 값은? 답: 2
<해설>
1. 함수 doStuff에 score의 값을 인자로 전달하여 실행
2. 매개변수 value에 score의 값 80이 전달되고, value=90에서 value에 90이 할당됨
3. 단 변수 score의 값 80은 값 자체를 복사하여 전달하기 때문에 함수에서 어떤 일이 발생했던가와 관련 없이 초기 할당된 값 80이 그대로 유지됨
<해설>
1. 함수에 변수 player을 인자로 전달하여 호출
2. 함수가 호출, 실행되면 매개변수 obj에 변수 player의 값이 할당
-> 변수 player의 값은 {score: 3}의 주소값
3. 함수로 들어가면 obj.score에 2를 할당하고, obj와 player은 같은 주소값을 가짐
4. player.score은 2가 됨
<내 생각/틀릴 수도 있음>


변수 score은 80이라는 고정된 값이 담긴 원시자료형이다.
함수 doStuff는 매개변수 value를 가지며, value에 90이라는 값을 할당한다. 
함수 doStuff에 전달인자를 score로 하여 호출하면, score의 값 80이 전달되지만, 값만 복사하여 전달되기 때문에 변수 score자체에는 영향이 없다. 
따라서 변수 score의 값은 변함없이 80이 된다.
<내 생각/틀릴 수도 있음>

변수 player는 객체로 참조자료형이다
함수에 변수 player를 넣어 호출하는 경우 그 주소값이 담긴다. 
함수 doStuff는 매개변수의 score값을 2로 할당하는데
변수 player를 전달인자로 받은 결과, 그 주소로 가서 score를 2로 바꾸어놓았다.
그 결과 player.score은 2가 된다.

https://www.youtube.com/watch?v=1VG7mTtwlOc

00:00 하이라이트
02:40 30년 경력 개발자의 꿈
04:45 블리자드에서 승진하기 위해 한 일
08:20 인생을 바꾼 조언 
10:15 "배우고 버리고, 배우고 버리는 게 개발자다"
14:03 "엔지니어는 호기심을 잃으면 끝난다"
16:45 "제품은 기술에 쌓이지만, 소프트웨어는 사람에게 쌓인다"

개발자라는 직업이 어떤 직업이냐? 개발자는 배우고 버리고 배우고 버리는 게 개발자다
개발자가 쓰는 언어, 기술은 계속 바뀐다. 현재 쓰고 있는 것은 배운 것에 5%밖에 안된다. 기술은 빠르게 변화하고 새로운 기술을 적용하는 것이 기존에 알고 있는 것을 쓰는 것 보다 나을 경우도 많기 때문에, 개발은 빠르게 배우는 것, 유연한 사고가 중요하다. 

소프트웨어 회사의 시스템도 발전하고 있음. 근데 마치 배열에서 객체로 발전한 느낌으로 발전함. 대규모로 진행하다가 이제는 퍼즐처럼 인력운용시스템이 완성됨.

 

+ Recent posts