不要理解这个javascript中闭包的例子

时间:2018-05-25 05:29:58

标签: javascript function closures

我对这个例子中的闭包感到有些困惑



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);
    }
  }); 
}




我理解闭包的概念,我只是不明白它在这个例子中是如何工作的。

3 个答案:

答案 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最终位于该匿名函数的闭包内。在这种情况下,在外部函数返回之前,它可以更改匿名函数执行时将使用的本地执行上下文。