2013-04-29 45 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