有时候我们需要在回调中读取本地变量。例如:
//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); }