{ } 안에 있는건 블록스코프인데
어째서 function에서 sum이 0 이 아니여요?
블록개념은 let이나 const로 지정하는것만 생기고 단순히 그냥 이미 선언된 변수의 값을 바꾸는거는 스코프가 작용이 안하는것?
function addition(...spreaded){
console.log(spreaded)
let sum=0;
for(let spreadedNums of spreaded){
sum = sum + spreadedNums;
}
console.log(sum)
}
더 바깥 스코프에서 선언한 변수는 안쪽 스코프에서 접근 가능함
부모 -> 자식 불가능, 자식->부모 불가능은 이해를했는데여, 왜 자식스코프에서 부모스코프의 변수의 값을 변경하면 부모스코프도 바뀌는건가여
아니 자식->부모 가능
바깥에서는 안쪽 스코프에 접근 못하지만, 안쪽에서는(물론 클로저 그런걸로 못하게 막을수잇긴하다던데 잘모름) 바깥 스코프에 접근할 수 있음
만약에 안쪽 스코프에서 변수 a가 있고, 안쪽 스코프에서 a를 출력하면 그 a를 출력해줌. 하지만 만약 안쪽 스코프에 우리가 원하는 a가 없으면, a이녀석 어딧냐~ 하면서 상위스코프로 하나씩 탐색함.
For문 안에서 sum의 값을 재정의하려고 하잖아, 근데 for문 안에서는 sum이 없어. 그래서 머야 sum 어디서 만들어진거야? 하면거 상위스코프로 한단계씩 올라갈거임. 그랬더니 함수 변수로 sum이 있네? 얘를 말하는거엿구나 하는거임
(...)내용은 캡슐화 말하는건가? 그건 그냥 외부함수 안에 중첩함수가 외부함수의 변수를 변경하는 기능을 가지고 있고, 외부함수는 그 중첩함수를 리턴하게하면 외부함수 생명주기가 끝나도 외부함수의 변수는 살아있고, 그 변수는 중첩함수로만 변경할수있게 되는것
아 헐 감사합니다 스코프 개념이 아직 완벽하지 않았네요. 그니께 for이 부모를 참조해서 sum을 대려오고 sum으로 계산식 수행하고 다된값을 잘 썻습니다~ 하고 쓴 상태 그대로 돌려놨다 라고 보면 되는거죠?
어.. 상태로 돌려준다는게 무슨뜻인지 모르겟는데,,,ㅠ 말그대로 상위스코프 sum변수를 참조해서 값을 변경한다. 이렇게만 전 이해하고 있습니당! 좀 더 이해하시려면 실행컨텍스트 파트 찾아보시면 좋을듯해요!