如何在JS中访问父函数的变量,然后阻止

时间:2018-07-27 19:00:03

标签: javascript

我需要从在外部函数中声明的then块内部访问变量,但是由于某些原因,其中一些显示为未定义。在then的范围内是否可以访问特定的名称?

function foo(tableIDs, tableID, fieldID)
{
    var tables = new Array();
    var bar = new Array();
    var zim = new Array();
    var gir = new Object();

    zim.push(fieldID);
    gir.id = fieldID;

    otherFunction(tableID).then(function(response)
    {
         tables.push(response); // works fine
         bar.push(response); // bar is undefined
         zim.push(response); // zim is undefined
         gir.response = response; //gir is undefined
    });
}

另外,虽然在then语句中可以访问tableID,但是tableID和fieldID都不可用。目前,我正在通过将fieldID推入表并以这种方式访问​​它来“解决”此问题,然后再处理响应,但这似乎是一个非常丑陋的解决方案,我想避免。表格和bar之间的唯一区别是变量的名称,上面示例中使用的所有名称正是我在处理此变量时使用的名称。

1 个答案:

答案 0 :(得分:0)

您的代码运行完美。我已经为测试目的完成了您的实施,并且工作正常。 检查一下:

function otherFunction(tableID){
  return new Promise(function(resolve,reject){
    resolve(tableID)
  })
}
  

function foo(tableIDs, tableID, fieldID){
    var tables = new Array();
    var bar = new Array();
    var zim = new Array();
    var gir = new Object();

    zim.push(fieldID);
    gir.id = fieldID;

    otherFunction(tableID).then(function(response){
         tables.push(response); 
         bar.push(response); 
         zim.push(response); 
         gir.response = response; 
         
         console.log('response:',response)
         console.log('tables:',tables)
         console.log('bar:',bar)
         console.log('zim:',zim)
         console.log('gir:',gir)
         console.log('tableIDs:',tableIDs)
         console.log('tableID:',tableID)
         console.log('fieldID:',fieldID)

    });
}

foo('test-tableIDs' , 'test-tableID', 'test-fieldID')

在将参数传递给foo()或Promise函数中时,您必须出错...