//使用闭包主要是为了设计私有的方法和变量。优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存的使用量,使用不当很容易造成内存泄漏
javascript语言的特别之处就在于:函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量。
注意点:在函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明的是一个全局变量!
javascript语言的特别之处就在于函数内部可以直接读取全局变量,但是函数外部无法读取函数内部的变量,那如何从外部读取函数内部的局部变量呢?
正常情况下这是办不到的,我们只能通过其他的方法才能实现,那就是再函数内部,在定义一个函数
function a() { var i=0; function b() { alert(i); } return b;//return b是返回一个函数,外部通过调用的这个返回函数就能获取到局部标量的值 } var c = a(); c();
注意 : 在函数内部生命变量的时候,一定要使用var声明,如果不用的话,就相当于声明了一个全局变量
在上面的代码中,函数b就被包裹在a内部,这是a内部的所有局部变量对b都是可见的 ,则b内部的变量a访问不到,
这也就是javascript语言特有的 链式作用域;
代码中函数a的内部函数b,被函数外面的一个变量c引用的时候,就创建了一个闭包,
return b是返回一个函数,外部通过调用的这个返回函数就能获取到局部变量的值。
函数b也可以用一个匿名函数代替来返回
既
代码中函数a的内部函数b,被函数a外面的一个变量c引用的时候,这就叫创建了一个闭包。有时候函数b也可以用一个匿名函数代替来返回,即r
return function(){
};