我对这个例子中的闭包感到有些困惑
function senddocu(selected)
{
$.ajax({
type: "POST",
data: {staff: $(selected).val()},
url: "localhost/htdocs/send.php",
dataType: "json",
success: function(response)
{
$("#responsecontainer").html(response);
console.log(response);
}
});
}

我理解闭包的概念,我只是不明白它在这个例子中是如何工作的。
答案 0 :(得分:1)
让我们看一下这里发生的事情:
用参数1调用函数f并将结果赋值给变量inner。
当调用f(1)时,f的范围有2个变量(param和n)
变量params是传递的参数,n是函数。
所以,在函数f里面 - 将变量n初始化为函数,然后递增param,然后从函数f返回n。
此返回的函数(n)被分配给内部。
当调用inner时,它返回param - 由于闭包而在函数n的范围内。
希望步骤清楚。
现在,你怀疑是如何获得param ++的。它没有,param ++在调用f(1)时已经执行了。所有n只是对param值的引用。
答案 1 :(得分:1)
在param
中成为函数的局部变量,它与函数f
的参数不同。函数f
返回n
这是一个函数
function f(param) {
var n = function() { //n is assigned the function that returns param
return param;
};
param++; // here param become a local variable of the function f
return n;
}
var inner = f(1);
console.log(inner());

答案 2 :(得分:1)
在此示例中,局部变量param最终位于该匿名函数的闭包内。在这种情况下,在外部函数返回之前,它可以更改匿名函数执行时将使用的本地执行上下文。