목차

반응형

for(var i=0;i<5;i++)

{

function asd(i) {

  console.log(i+3);

}

}

을 하면 분명 3 4 5 6 7 이 나와야 하지만

7 7 7 7 7이 나온다.


정말 골치아픈 문제였다.

분명 작동은 하는데 반복문 안의 함수가 맨 마지막 i값으로만 처리가 되버린다.

처음에는 어이가 없었음.


아마도 meanstack의 동기처리 때문에 그런듯 하다. (동기처리가 정말 밉더라)

http://apple77y.tistory.com/11


해결법으로는 3가지를 찾았음.


1. 반복문 안의 함수를 반복문 밖에서 선언한뒤에 parameter를 사용하여 정상적으로 수행.

근데 내가 만든 기능이 find안에 find를 또쓰는거라서 너무 복잡해버리게되어서 2번으로 해본뒤에 2번으로 쓰기로함.

function asd(num) {

  return (num+3);

}

이런식으로 만든뒤에

for(var i=0;i<5;i++)

{

asd(i);

}

대충 이런식?


2. With ({ n : i }) { ... }를 이용하여 정상적으로 수행.

function test() {

  for (var i = 0; i < 5; i++) {

       with ({ n: i }) {

      function asd() {

console.log(n+3);

}

    }

  }

}

.이런느낌? 개인적으로 2번보다 깔쌈한것같음.

3. Promise 기능을 사용하여 수행.

먼가 고급스러운 해결방법같지만 너무 어려워보여서 싫었음.


http://stackoverflow.com/questions/1451009/javascript-infamous-loop-issue

반응형