2013-04-29 3 views
1

자바 스크립트에서 내 전역 변수 값을 변경하는 데 문제가 있습니다. 전체 코드는 다음과 같습니다. 모든 페이지에서 자바 스크립트에서 전역 변수 값 변경이 작동하지 않습니다.

//Initialize cordoba 
document.addEventListener("deviceready", onDeviceReady, false); 

function onDeviceReady(){ 
    var undefined; 
    var phone_number; 

    //change phone_number 
    checkData(); 

    //alert the new phone_number 
    alert(phone_number); 


    function checkData(){ 
     var db = window.openDatabase("Demo", "1.0", "Demo", 512000); 
     db.transaction(selectProfile,DBerror); 
    } 

    function selectProfile(db){ 
     db.executeSql('SELECT phone_number FROM profile', [], 
      function(db,results){ 
       if(results.rows.length > 0){ 
        //change the global variable(phone_number) 
        phone_number = results.rows.item(0).phone_number; 
       }else{location.href = 'index.html';} 
      }, 
      DBerror 
     ); 
    } 
} 

, 난, 데이터베이스에서 전화 번호의 가치를 그 값으로 전역 변수 (PHONE_NUMBER)를 변경하고 전체 스크립트에서 그것을 통해 사용해야합니다. 감사합니다.

+0

변수가 있는지 확인하고 이전 브라우저에 정의해야합니다. – Spikes

+0

전화 번호를 반환하는 getPhoneNumber() 함수가없는 이유는 무엇입니까? 그런 다음 당신은'var phone_number = getPhoneNumber();' – Bucket

+0

라고 말할 수 있습니다. phonegap API가 어떻게 작동하는지 구현할 수 없거나 (어쩌면 그걸 할 방법을 찾지 못했습니다) – Spikes

답변

1

아무 기능이든 작동하지 않아도됩니다. phone_number을 선언하십시오.

window.phone_number을 사용하여 전역 범위를 보장 할 수도 있습니다. 그러나 이것은 나쁜 습관으로 간주됩니까? 나는 왜 나보다 많은 경험을 가진 누군가가 그 이유를 설명 할 수 있다고 확신한다.

+0

여전히 정의되지 않은 – Spikes

+1

'창이라고합니다. phone_number는 글로벌 변수가 일반적으로 나쁜 습관 일 때만 나쁜 관행입니다. 'window'를 사용할 때 특히 나쁜 점은 코드가 node.js로 이식하기가 다소 어려울 것입니다. node.js는 전역으로'window' 대신'global'을 사용합니다. – apsillers

+1

@Spikes 당신은 어떤 변수의 바깥 쪽에서'phone_number'를 정의 할 필요가 있습니다 ** 그리고 ** 다른 곳에서는 정의하지 * 않습니다. 스크립트의 맨 위에'var phone_number'를 추가했는데'onDeviceReady' 안에있는'var phone_number'를 제거하지 않았다면, 내부 선언은 외부 선언을 "그림자"할 것이기 때문에'phone_number'를 설정하면 지역 변수가 아닌 전역 변수. – apsillers

관련 문제