-
글쓴이글
-
2022년 3월 24일 20:31 #30269
frysweet참가자선생님 전역함수에서 갱신한 변수의 값을 return 시켰는데도 전역변수의 값이 바뀌지 않습니다..ㅠㅠ
전역에 draginstance = null; 선언해놓고,
전역 함수 블록 안에서 draginstance 값을 바꾸었는데요.
.addEventListener()의 콜백함수로 전역함수를 넣어서 사용한뒤,
다음 이벤트에서 콜백함수로 바꾼 전역값을 사용하려고 하면, 변경이 안되어 있습니다.첫번째 콜백함수에서 값이 바뀐걸 확인했고,
두번째 콜백함수는 첫번째 콜백함수가 호출된 뒤 호출되는데 값이 왜 변경이 안되는걸까요.
return draginstance; 로 바꾼 변수값을 뱉어냈는데도, 똑같습니다.
왜 이럴까요...ㅠㅠ-> 코드 링크 입니다.
https://replit.com/@snowb2/LightcyanThoroughSlash#index.html2022년 3월 24일 21:32 #30278
codingapple키 마스터컴퓨터는 변수를 쓸 때 가장 가까운 변수를 먼저 찾아서 쓰려고합니다
function dragstart(e, draginstance) {
draginstance = e.currentTarget;
위 코드에서 draginstance라고 쓰면 바깥에 있던 let draginstance 가 아니라
파라미터인 draginstance 를 가져다써서 그럴수도요 파라미터도 일종의 변수입니다
2022년 3월 25일 01:05 #30290
frysweet참가자답변 감사합니다 !
[이벤트 리스터 콜백함수]의 파라미터에서 draginstance 빼니까 정상적으로 작동하는데요.
저는 '전역 변수를 파라미터로 넣어줘서 함수 블록에서 사용하겠다.' 는 개념으로 넣어준건데,
이벤트 리스너의 콜백함수로 사용하게 되면, 변수의 이름이 같고, 'const'나 'let','var'이 붙어 있지 않아도, 새로운 로컬변수를 생성했다고 인식하나요?2022년 3월 28일 05:31 #30522
frysweet참가자답변감사합니다.
조금 헷갈리는 부분이 있는데요,파라미터에 전역변수랑 같은 이름으로 파라미터의 이름을 넣으면,
해당 전역변수가 파라미터에 들어가는 것이 아니라,
파라미터에서 새 변수가 생성된다는 의미로 이해했습니다.그런데, 함수 안에 함수 블록을 넣어서 실행할때는,
부모 함수에서 생성한 변수를 같은 이름으로 설정해서 중첩함수의 파라미터로 넣어도,
부모함수 변수가 잘 들어가지거든요.그런데 전역스코프에서는 왜 전역변수가 같은 이름으로 설정하면, 파라미터로 안들어가지는지 궁금합니다.
전역 함수를 선언할때, 파라미터 이름을 전역변수와 다르게 하고, 나중에 전역변수를 넣는 방법은 제대로 작동하는데요.
중첩 함수에서는 파라미터 이름을 똑같이 해도 부모함수 블록의 변수 정보를 잘 받아와서 작동합니다...제가 어느 부분을 잘못 이해하고 있는건지 잘 모르겠어요..ㅠㅠ
코드 경우의 수 나눠서 작성해봤는데,
참고 부탁드립니다.https://replit.com/@snowb2/FrontRapidAdvance#script.js
2022년 3월 28일 09:51 #30528
codingapple키 마스터마지막예제 말씀이십니까
function change(){
var global = 바깥global변수;
global = global +1
return global
}
이렇게 동작해서 그렇습니다 파라미터는 새로 변수만드는 문법일 뿐입니다
2022년 3월 28일 18:47 #30561
frysweet참가자3번째 예시에서는
함수 블록 안에 들어가 있는 함수에 , [부모 함수의 변수 이름] 그대로 파라미터로 넣어줬는데,
파라미터에서 새 변수를 생성하지 않고, 부모변수를 그대로 가져와서 사용하는데, 왜 다르게 동작하는 걸까요?2022년 3월 28일 21:53 #30572
codingapple키 마스터let global = 0;
function change(num){
global = num+1;
const newNum = num +2;
function inside(newNum){
console.log(newNum);
}
inside(newNum);
return global;
}
change(global);위 코드에선 change함수안에선 var num = 0 이 추가되겠군요
그래서 newNum은 2고 global은 1인듯요
2022년 3월 31일 21:54 #30786
frysweet참가자제가 질문을 헷갈리게 드렸나봐요 ..ㅠㅠ 전역변수 바뀌는 건 이해됬는데, 중첩함수의 변수가 헷갈려요
1.
예제 5 보시면, 중첩함수인 inside() 함수내에서 파라미터로 newNum을 받아서, newNum을 바꾸는데, change() 블록내의 const newNum이 inside()에서 바꾼 결과가 반영이 안되요.2.
또 예제 6에서는 inside()의 파라미터를 newNum 대신 a로 바꿔서 선언하고, 실행할때만 change()함수 에 선언되어 있는 const newNum 을. inside(newNum) 에 넣어줬는데, 에러가 나고 이유를 모르겠어요..2022년 3월 31일 22:45 #30792
codingapple키 마스터1번문제 빨간 물음표 화살표가 이상하군요
화살표끝에서 console.log(newNum) 하면 그냥 가장 가까운 const newNum을 가져다쓸 뿐입니다변수는 함수 밖으로 탈출하지않습니다
2번은 newNum = a + 1 할 때 newNum변수를 발견하면 가장 가까운걸 찾아서 쓰려고 하는데
근처 newNum변수는 함수바깥의 const newNum 밖에 없군요
const 변수에 할당하지말라고 에러나는듯요
-
글쓴이글
- 답변은 로그인 후 가능합니다.