使用参数将局部变量传递给lambda函数?

时间:2017-11-28 13:46:43

标签: javascript jquery ajax asynchronous lambda

查看以下示例:

var data = "abc";   

$.post(ajaxurl,data,function(results) {
    console.log(data);
    console.log(results)
} ,'JSON');

data = "ghi";

结果:

  

数据:" ghi"

     

结果:"结果"

传递数据:

var data = "abc";   

$.post(ajaxurl,data,function(results) {
    console.log(data);
    console.log(results)
} (data) ,'JSON');

data = "ghi";

结果:

  

数据:" abc"

     

结果:" abc"

但是我想要实现的是传递局部变量data但是仍然从回调中接收传递的变量。

期望的输出:

  

数据:" abc"

     

结果:"结果"

在PHP中,这将是:

function abc($result) use ($data) {
    //...
}

我该如何实现这种行为?

编辑 - 澄清:我想将本地变量当前状态传递给带参数的异步请求回调

2 个答案:

答案 0 :(得分:1)

根据评论中的对话,你想要这个:

SELECT a.a_id, a.variable1, a.variable2 FROM b
LEFT JOIN a ON a.a_id = b.a_id
LEFT JOIN c ON c.c_id = b.c_id
WHERE  a.variable1 IN ('1', '4');

即使异步操作稍后完成,这也会将“数据”记录到控制台而不是“foo”。

答案 1 :(得分:1)

您可以使用IIFE围绕整个请求创建一个闭包。假设data是原始值。如果它是数组或对象,您需要复制它或使用promise回调来更改它,因为数组和对象是通过引用传递而不是值

var data = "abc"; 

(function(data){    

    $.post(ajaxurl,data,function(results) {
     console.log(data); // abc
     console.log(results)
     } ,'JSON');

})(data);

data = "ghi";