JS变量的作用域:在JS中当在外面定义一个变量时,例如var a=3;这便是一个全局变量。
当在函数中定义一个变量时,
例如function(){
var a=10;
那么这就是一个局部变量,并且该变量只能在该函数中起作用。
当我不定义类型时:a=10;(那么它就是一个全局变量)
}
闭包的概念及作用:闭包在我理解就和java中的get方法一样,是用来获取其他函数中的内部变量的函数。
由于在JavaScript中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。
所以本质上闭包就是函数内部和函数外部连接起来的一座桥梁。
闭包的另一个作用:可以让这些值始终保存在内存中。
事例:
//****JavaScript闭包******* var a=22;//在JS中是全局变量 function fun(){ alert(a); } fun();//输出结果是22 function fun2(){ //var b=11;//私有变量 c=12;//公有变量 } fun2(); //alert(b);//获取不到b,无法输出,会报错 alert(c); //闭包 function fun3(){ var d=99; function fun4(){ return d;//通过fun3中的私有方法访问其父类的所有变量,以获取并返回 } return fun4;//把fun4返回出去,间接获取返回的私有变量d的值 } var e=fun3(); alert(e()); //JavaScrip中的闭包 var name="The window";//定义全局变量 var object={//定义一个名为object对象 name:"The object",//定义其name属性,值是The object getNameFun:function(){//定义其getNameFun属性,值是一个function() return function(){ return this.name;//这里的this是指的window对象,所以name值就是The window }; } }; alert(object.name);//结果是The object alert(object.getNameFun()())//object.getNameFun()是获取其该属性的值,要想执行其中方法就要在后面加一个() //结果是The window
闭包使用时的注意点:
1.由于闭包会使得函数中的变量都保存在内存中,内存消耗很大所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能会导致内存泄漏。解决方案:在退出函数时,将不使用的变量全部删除。
2.闭包会在父函数外部,改变父函数内部的值。所以你把父函数当做对象使用,把闭包当做它的公用方法,把内部变量当做它的私有属性时,一定要注意,不要随便改变父函数内部变量的值。