一、闭包的概念:
阮一峰说:
我的理解是,闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
二、闭包的用途:
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
三、闭包的优缺点:
优点:可以读取函数内部的变量。
缺点:变量会始终保持在内存中,占用大量内存。
变量的作用域:
变量的作用域分类:全局变量和局部变量。
特点:
1、函数内部可以读取函数外部的全局变量;在函数外部无法读取函数内的局部变量。
2、函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量。
代码示例:
注:基本类型数据:数字(number)、字符串(string)、布尔(boolean)、null、undefined
引用类型数据:Object 、Array 、Function 、Data(实际操作的是数据的地址)
1、当内部参数为常量时(基本类型数据)
function f1(){
var n1=999;
function f2(){
alert(n1);
return n1;
}
return f2;
}
var result1=f1();
result1(); // 999
result1()+1;//结果为1000; 此时n=999
2、当内部参数为引用类型数据时:
function f3(){
var n2=[111,222];
function f4(){
alert(n2);
return n2;
}
return f4;
}
var result2=f3();//此时相当于函数f4()已经被声明了,可在外部调用f4了已经
result2(); // [111,222]
result2()[0]=333;//现调用result2()返回[333,222]