闭包
闭包:
闭包是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)公用方法