소개
게시글
질문&답변
2021.01.29
\'와 변수를 같이 쓰면 안 되나요?
// 첫 번째 방법(ES5 방식) var 홍길동 = '나'; console.log("'" + 홍길동 + "는 귀엽다'"); // 두 번째 방법(ES6+ 방식) const 홍길동 = '나'; console.log(`'${홍길동}는 귀엽다'`); 이렇게 코드 짜시면 됩니다. 변수 이름일지라도 ""로 감싸버리면 문자로 인식해버리기 때문에변수는 항상 변수 본래 이름 자체로 써줘야합니다. 아니면 ES6+ 방식인 템플릿 리터럴로 작성해주시면 쉽습니다.
- 0
- 2
- 224
질문&답변
2021.01.22
첫번째 for문에서 i값 5가 5번 출력 되는 이유
for(var index in arr) { console.log(arr[index]()); } 위 코드를 실행 시키면 차례대로 arr[0]() ~ arr[4]() 이런식으로 함수를 실행시키게 됩니다.하지만 각 배열에 담긴 함수는 전역변수 i를 참조하고 i를 리턴하고 있죠. 그래서 최종적으로 5까지 증가된전역변수 i가 5번 출력되는 겁니다.즉, arr[4]가 5를 담고 있는게 아니라 0~4 인덱스 배열 전부 전역변수 i를 참조하고 있는 겁니다.조금 잘못 이해하신 것 같아서 제가 다른 질문글에 답글 달아놓은 부분 다시 끌어올려 여기에 남깁니다. 우선 이런 문제는 var 의 문제점이라 볼 수 있습니다.es6(es2015)부터는 이런 문제때문에 var 대신 const, let 을 쓰자고 지향하고 있습니다. for (var i = 0; i 우선 위에 방식으로 for 문 안에 var i를 선언하고 바깥에서 console.log(i) 를 호출하면 이상하게오류 없이 호출되는 걸 볼 수 있습니다.그 이유는 var 선언 방식이 block scope가 아니라 function 단위 scope이기 때문에for문이 끝났음에도 여전히 전역변수로써 유효하기 때문입니다.전역변수로 선언되어 버리는 부분이 어떤 문제를 일으키는지 아래 코드를 보면서 살펴보죠. * 영상에서의 코드 var arr = []; for (var i = 0; i ↓ arr[0] = function () { return i; }; arr[1] = function () { return i; }; ... arr[4] = function () { return i; }; 이런식으로 배열내 각 인덱스에 할당되겠죠. 하지만 return 값은 할당될 때의 i 값이아니라 전역변수 i 를 참조하고 있기 때문에 이 함수들을 호출하면 계속해서전역변수 i 의 최종 값인 5를 불러오게 되는 겁니다.첫번째 for 문에서 루프가 끝나면서 전역변수 i의 값이 이미 5가 되었으니까요. * 클로저를 사용하면 정상작동 하는 이유 for (var i = 0; i 클로저(closure)를 사용하여 전달인자(argument)로 i 값을 주면 배열에 각 함수가 할당될 때 그 때의 i 값을 매개변수(parameter)로 받기 때문에 지역변수를 사용한 것 같은 효과가 나게되는 것이죠.
- 0
- 3
- 298
질문&답변
2021.01.19
name이 뭐죠
const o1 = { val1: 1, val2: 2, val3: 3 } for (const name in o1) { console.log(o1[name]); // val1, val2, val3 } for ... in 문에서 앞에 선언부는 name으로 하든 value로 써놓든개발하시는 분 마음이고 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복해줍니다.for ... in 문에서 in this 라고 this에서 반복한다고 선언했기 때문에 this가가르키는 객체에서 키값을 불러오고 있는겁니다.
- 0
- 1
- 180
질문&답변
2021.01.19
섹션15. 클로저 응용 수업 질문
이미 오래지나서 제 답변이 유의미할 지는 모르겠지만 수업내용과는 좀 차이가 있습니다.작성자분께서 작성하신 코드는 arr[i] 에 함수를 할당하고 i를 전달인자(parameter)로 주고바로 할당한 함수를 실행한 코드입니다. for (var i = 0; i 결국 배열에 직접 값을 할당한 이 코드랑 같은 셈죠. 영상에서는 배열에 함수를 담아 사용할 때의 상황을 소개하고 있는데,arr[i] 에 함수를 할당 한 후 함수를 호출하였을 때 5만 계속 를 리턴하는예상밖의 문제가 발생하죠. 그리고 그 해결책으로 Closure를 사용한 것입니다. 또한, 이건 var를 사용할 때의 문제점이기도 합니다. 문제 발생의 이유는 당시 배열에 할당된 함수가 전역변수 i를 계속해서 참조하고 있기 때문입니다.var는 function scope이기 때문에 for에서 선언하면 전역변수로써 기능해버리죠. arr[0] = function () { return i; // 전역 변수 i를 계속해서 참조. } ... arr[1] = function () { return i; }
- 0
- 1
- 226
질문&답변
2021.01.19
첫번째 예시문에서 값이 왜 5가 5번 반복되는지 궁금합니다.
우선 이런 문제는 var 의 문제점이라 볼 수 있습니다.es6(es2015)부터는 이런 문제때문에 var 대신 const, let 을 쓰자고 지향하고 있습니다. for (var i = 0; i 우선 위에 방식으로 for 문 안에 var i를 선언하고 바깥에서 console.log(i) 를 호출하면 이상하게오류 없이 호출되는 걸 볼 수 있습니다.그 이유는 var 선언 방식이 block scope가 아니라 function 단위 scope이기 때문에for문이 끝났음에도 여전히 전역변수로써 유효하기 때문입니다.전역변수로 선언되어 버리는 부분이 어떤 문제를 일으키는지 아래 코드를 보면서 살펴보죠. * 영상에서의 코드 var arr = []; for (var i = 0; i ↓ arr[0] = function () { return i; }; arr[1] = function () { return i; }; ... arr[4] = function () { return i; }; 이런식으로 배열내 각 인덱스에 할당되겠죠. 하지만 return 값은 할당될 때의 i 값이아니라 전역변수 i 를 참조하고 있기 때문에 이 함수들을 호출하면 계속해서전역변수 i 의 최종 값인 5를 불러오게 되는 겁니다.첫번째 for 문에서 루프가 끝나면서 전역변수 i의 값이 이미 5가 되었으니까요. * 클로저를 사용하면 정상작동 하는 이유 for (var i = 0; i 클로저(closure)를 사용하여 전달인자(argument)로 i 값을 주면 배열에 각 함수가 할당될 때 그 때의 i 값을 매개변수(parameter)로 받기 때문에 지역변수를 사용한 것 같은 효과가 나게되는 것이죠.
- 0
- 3
- 462