2017-09-13 20 views
3

我是JavaScript和firebase的新手。我只想问是否有机会在我的函数之外调用我的变量?在javascript中调用函数外的变量

这里是我的示例代码:

function gotData (data) { 
    console.log(data.val()) 
    var promotions = data.val() 
    var keys = Object.keys(promotions) 
    console.log(keys) 
    for (var i = 0; i < keys.length; i++) { 
    var k = keys[i] 
    var name = promotions[k].promotionName 
    var description = promotions[k].description 
    var validityFrom = promotions[k].validityPeriodFrom 
    var validityTo = promotions[k].validityPeriodTo 
    var dateCreated = promotions[k].dateCreated 
    var dateUpdated = promotions[k].dateUpdated 
    console.log(name, description, validityFrom, validityTo, dateCreated, dateUpdated) 
    } 
} 

我可以调用的名称,描述,validityFrom等功能gotData之外?我会感激的帮助。先谢谢你! :)

+2

”功能以外“? –

+1

简答:没有。这里是一个关于“变量作用域”的页面:https://www.w3schools.com/js/js_scope.asp –

+2

你可以显示'调用我的变量在函数外的代码吗? – superdev

回答

3

定义变量作为全局变量

//above function 
var name, description, validityFrom, validityTo, dateCreated, dateUpdated; 
function gotData (data) { 
    console.log(data.val()) 
    var promotions = data.val() 
    var keys = Object.keys(promotions) 
    console.log(keys) 
    for (var i = 0; i < keys.length; i++) { 
    var k = keys[i] 
    name = promotions[k].promotionName 
    description = promotions[k].description 
    validityFrom = promotions[k].validityPeriodFrom 
    validityTo = promotions[k].validityPeriodTo 
    dateCreated = promotions[k].dateCreated 
    dateUpdated = promotions[k].dateUpdated 
    console.log(name, description, validityFrom, validityTo, dateCreated, dateUpdated) 
    } 
} 
// now you can access variables here 
console.log(name, description, validityFrom, validityTo, dateCreated, dateUpdated) 

编辑

您可以创建一个数组来获取所有的变量,你可能有一个内部的多维数据

var objData = []; 
function gotData (data) { 

    console.log(data.val()) 
    var promotions = data.val() 
    var keys = Object.keys(promotions) 

    for (var i = 0; i < keys.length; i++) { 
    var tempObj = []; 
    var k = keys[i] 
    tempObj['promotionName'] = promotions[k].promotionName; 
    tempObj['description'] = promotions[k].description; 
    tempObj['validityPeriodFrom'] = promotions[k].validityPeriodFrom; 
    tempObj['validityPeriodTo'] = promotions[k].validityPeriodTo; 
    tempObj['dateCreated'] = promotions[k].dateCreated; 
    tempObj['dateUpdated'] = promotions[k].dateUpdated; 

    objData.push(tempObj); 
    } 
    console.log(objData) 
} 
+1

这些值被分配在一个循环中,以便它们不断变化。这可能没有多大帮助。 –

+0

那么,他想从哪个循环访问哪个循环,不能有两种方式 – Dellirium

+0

全局变量是代码味道,并不是一个好的选择。 – Script47