javascript在回调中读取本地变量

有时候我们需要在回调中读取本地变量。例如:

//jQuery
function foo() {
    var a = 1;
    $.get("bar.php", function(res){
        alert(a); // undefined
    });
}

这时回调函数的上下文已经不是foo函数的内部了。想要在回调函数读取本地变量,需要为回调函数创造一个包含本地变量的上下文。

javascript的基本的上下文范围是函数作用域,我们可以新建一个函数,里面包含本地变量的副本。然后返回回调,从而创造出一个包含我们预设上下文的回调函数。

这就需要用一个函数生成一个函数。在javascript可以如此实现:

function foo() {
    var a = 1;
    var func = (function(a_copy) {
        return function(res) {
            //real callback
            alert(a_copy);
    })(a);
    $.get("bar.php", func);
}