javascript-闭包

来源:互联网 发布:python 读取股票数据 编辑:程序博客网 时间:2024/06/03 17:27

闭包

要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就是两种:全局变量和局部变量。Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量


变量的作用域

 var n=999;  function f1(){    alert(n);  }  f1(); // 999

如何从外部读取局部变量

那就是在函数的内部,再定义一个函数。

  function f1(){    var n=999;    function f2(){      alert(n); // 999    }  }

在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。这就是Javascript语言特有的”链式作用域”结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!

 function f1(){    var n=999;    function f2(){      alert(n);     }    return f2;  }  var result=f1();  result(); // 999

“`

原创粉丝点击