闭包

闭包:

闭包是JavaScript中的一个概念,今天在看前端面试题,看到了闭包,一直不得甚解,今天决心弄懂它。

JavaScript在函数内部可以读取全局变量,如下所示

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

输出999

在函数外部不能读取函数内部的局部变量

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

输出: Uncaught ReferenceError: n is not defined(…)

如果我们要取到函数内部的局部变量时的话要利用第一条特性:

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

在函数f1中在定义一个函数f2 调用f2输出函数f1的值

 

《JavaScript权威指南》中提到“JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里

 

在C#中变量的作用域是块级的 即两个{}之间,而在JavaScript中,变量的作用域是限定在函数里的

javaScript中输出是8
function
aa(){ if(true){ var a= 8; } alert(a); } aa();

输出是8;

C#中则不能通过编译
public string aa(){ if(true){ var a= 8; } return a } aa();

  

我们可以这样理解 父函数f1是一个对象,n是其(private)私有属性,函数f2(闭包)则是其(public)公用方法

posted @ 2016-11-14 23:56  落叶落  阅读(171)  评论(0编辑  收藏  举报