2013-04-29 44 views
1

我在更改javascript中全局變量的值時出現問題...以下是完整的代碼。更改全局變量值在javascript中不工作

//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 2013-04-29 19:13:07

+0

你爲什麼不簡單地有一個'getPhoneNumber()'函數返回電話號碼?然後你可以說'var phone_number = getPhoneNumber();' – Bucket 2013-04-29 19:17:45

+0

由於phonegap api的工作原理 – Spikes 2013-04-29 19:46:56

回答

1

聲明phone_number以外的任何函數都應該可以工作。

您還可以使用window.phone_number來保證全球範圍。但這被認爲是不好的做法?我相信有比我更多經驗的人可以解釋爲什麼。

+0

仍然顯示undefined – Spikes 2013-04-29 19:15:31

+1

'窗口,所以無法實現(或者我可能找不到解決辦法)。 phone_number'只是一個不好的做法,因爲全局變量通常是不好的做法。關於使用'window'的唯一特別的壞處是你的代碼將更難轉到node.js,它使用'global'而不是'window'作爲其全局。 – apsillers 2013-04-29 19:20:05

+1

@Spikes您需要在任何變量之外定義'phone_number' **和** *不在其他任何地方定義它。如果你剛剛在腳本的頂部添加了一個'var phone_number',但*沒有刪除'onDeviceReady'內的'var phone_number',那麼內部聲明將會「隱藏」外部聲明,所以設置'phone_number'將設置局部變量,而不是全局變量。 – apsillers 2013-04-29 19:22:20