2010-07-24 3 views
5

이것은 내 첫 번째 게시물이지만이 커뮤니티에 가입하게되어 기쁩니다. JavaScript에 관해서 내가 완전히 혼란스러워하는 질문이 있습니다.JavaScript 메소드는 변수가 할당 된 상태에서 시작됩니다. ?? 매우 혼동했습니다

저는 아약스를 사용하여 서버에서 데이터를 가져 와서 차트에 추가하는 JavaScript 애플리케이션을 작성하고 있습니다. Jquery와 Highcharts를 프레임 워크로 사용하고 인터페이스를 생성하기 위해 Highcharts 주변에 자체 JavaScript 'wrapper'를 작성했습니다.

jSON 응답으로 processData 함수를 다시 호출하면 초기화되지 않거나 심지어 선언되지 않아도 i = 1로 시작됩니다. 다른 변수도 설정됩니다. (크롬 개발자 도구를 사용하여 디버깅 할 수 있음을 알고 있습니다.) 그러면 루프가 실행되지 않고 내 데이터가 차트에 추가되지 않습니다.

얼마나 많은 코드를 표시해야할지 모르지만 가장 관련이있는 부분입니다. 필요한 경우 더 추가 할 수 있습니다.

function getData(series, min, max, numpts) { 
     if (series === undefined) { 
      console.log("error on getData"); 
      return; 
     } 

     var request = {}; 
     request.series = series; 

     if (min !== undefined) { 
      request.start = min; 
     } //in seconds 
     if (max !== undefined) { 
      request.end = max; 
     } 
     if (numpts !== undefined) { 
      request.numpts = numpts; 
     } 
     $.getJSON('/data', request, processData); 
     return; 
    } 

    function processData(data) { 
     // handle the data after it comes back from an ajax request 
     var curSeries, 
      chartSeries, 
      curPoint; 

     for (var i = 0; i < data.length; i ++) { 
      curSeries = data[i]; 
      chartSeries = chart.get(curSeries.name); 

      if (chartSeries === null) { 
       //alert("oops"); 
       chart.addSeries(curSeries); 
      } else { 
       for (var j = 0; j < curSeries.data.length; j ++) { 
        curPoint = curSeries.data[j]; 
        chartSeries.addPoint(curPoint, false); 
       } 
      } 
     } 
     chart.redraw(); 
    } 

이들은 모두 그래프라고 선언 된 클래스의 메소드입니다.

아무도 아이디어가 있다면 고마워! - 매트 P

+4

'i'는 결코 1로 시작하지 않을 것입니다. 루프가 실행되지 않는 유일한 방법은 data.length == 0. 만약'processData'의 맨 위에서'alert (data.length)'를하고 확인하십시오. – Matt

답변

2
나는 당신의 데이터가 그 루프가 잘 작동해야 당신이 내가 사전을 선언 한 경우에도, 무엇을 기대하는지 확인하기 위해 개체를 검사 콘솔 것

: 당신은 그것을 0을 할당하고 루프의 시작, 어쨌든. 내가 그 생각할 수

유일한 이유는 내가 정의하고 정의가있는 경우 다른 곳에 당신의 코드베이스에서 당신이 VAR 키워드로 내가를 초기화하지 않는 것입니다 초기화하기 전에 초기화 될 것이다. 그렇게하면 전역 범위 ( 개체)에 덤프되며 코드베이스의 모든 함수에 대한 클로저를 통해 사용할 수 있습니다.

파일 중 하나에 없으면 하이 차트 그래프 라이브러리에있을 수 있습니다 (이 경우 해당 라이브러리에서 아주 빨리 실행됩니다).

+0

jQuery 라이브러리는 전역 범위로 변수를 유출 할 수도 있습니다. 일반적으로 범위가 꽤 좁습니다. 어쨌든, 당신이 말했듯이 그건 중요하지 않아야합니다. Javascript는 수십 년 동안 많은 전역 변수와 함께 살았습니다. 최근에는 범위 지정에 대한 지식이 널리 확산되었습니다. – Guffa

+0

그래서 크롬 디버거를 사용하여 어떻게 초기화 되었는가를 알았습니다 ... 그러나 jslint를 통해 코드를 실행하고 몇 가지 항목을 정리했습니다. 그리고 갑자기 그 일을 그만 두었습니다 ... 그 기능 근처에서 아무 것도 정말로 변하지 않았기 때문에 나는 왜 확신하지 못합니다. 나는 또한 그것이 크롬 문제일지도 모른다라고 생각한다. 나는 이전에 같은 탭에서 잠시 동안 작동 했었는데, 어쩌면 콘솔을 손상 시켰을 수도 있습니다. :( – MattyP

관련 문제