2013-03-03 3 views
0

JS에서 함수를 작성하고 있지만 변수가 마커 인에 문제가 있습니다.JavaScript 범위 지정 변수가 지정되지 않았습니다.

코드 :

function piano(numero, link) { 

      var marker; 
      this.marker = marker; 

      var immagine = loadImage(link, marker); 
      this.immagine = immagine 


      function createMarker() { 

        return new RichMarker({ 

          .... 

        }); 
      } 

      function loadImage(link, marker) { 

        var immagine = new Image(); 

        immagine.src = link; 

        immagine.onload = function() { 
          marker = createMarker(); 
        }; 

        return immagine; 
      } 

      .... 

variabile immagine 그림의 로딩 기능 loadImage 호출 초기화된다. 이미지의 로딩 후 마커의 할당을해야 할

    immagine.onload = function() { 
          marker = createMarker(); 
        }; 

:이 기능에

는 코드입니다.

나는 이미지의 로딩 후, 마커에 액세스하려고

, 항상 정의되지 않은 결과; RichMarker가 생성되었음을 알고 있습니다.

왜 이런 일이 발생하는지 이해가되지 않습니다.

+0

' Number' 또는'String' 또는'undefined'입니다. 마커가 배열이나 객체 이외의 것이라면 나중에'marker'와'this.marker'는 나중에 수정할 때 같은 객체가 아닙니다 (정의되지 않았기 때문에 작동하지 않습니다). – Chad

답변

0

JavaScript 변수는 객체에 대한 참조를 저장하지만 Number 또는 String 또는 undefined과 같은 참조를 공유 할 수는 없습니다. 이 배열이나 객체 이외의 것이라면 나중에 과 this.marker을 수정할 때 동일한 객체가되지 않습니다. 참조를 할당하는 대신 값을 복사하는 것으로 간주합니다.

대신 그래서 나중에 참조 할 수 있으며, this 개체를 범위 지정 시도가 다시 객체 : 변수는 개체에 대한 참조를 저장합니다,하지만 당신은 참조 말을 공유 할 수 없습니다 자바 스크립트

function piano(numero, link) { 
    var self = this; 
    this.immagine = loadImage(link); 


    function createMarker() { 
     return new RichMarker({ 
      //... 
     }); 
    } 

    function loadImage(link) { 
     var immagine = new Image(); 
     immagine.src = link; 

     immagine.onload = function() { 
      //use the scoped version of 'this' 
      self.marker = createMarker(); 
     }; 

     return immagine; 
    } 

    //... 
} 
관련 문제