淺談js閉包理解
閉包是js中的一大特色,也是一大難點。簡單來說,所謂閉包就是說,一個函數(shù)能夠訪問其函數(shù)外部作用域中的變量。
閉包的三大特點為:
1、函數(shù)嵌套函數(shù)
2、內(nèi)部函數(shù)可以訪問外部函數(shù)的變量
3、參數(shù)和變量不會被回收。
舉例來說:
function test(){
var a=1;
return function(){
alert(a);
}
}
var try=test();
try();//彈出a的值
這個例子中,變量a在test方法外部是無法訪問的,但test方法里面,嵌套了一個匿名函數(shù),通過return返回,test作用域中的變量a,可以在匿名函數(shù)中訪問。并且當(dāng)test方法執(zhí)行后,變量a所占內(nèi)存并不會釋放,以達(dá)到嵌套的函數(shù)還可以訪問的目的。
閉包的作用在于,可以通過閉包,設(shè)計私有變量及方法。
舉例來說:在java中創(chuàng)建perosn類,含有私有變量name。
public class Person{
private String name='wy';
public Person(val){
name=val;
}
public void setName(val){
name=val;
}
public String getName(){
return name;
}
}
在js中實現(xiàn)類似java創(chuàng)建類的功能:
(function(){
var name="wangyu";
Person=function (val) {
name=val;
}
Person.prototype.setName=function(val){
name=val;
}
Person.prototype.getName=function () {
return name;
}
})();
var person1=new Person("sj");
alert(this.name)//undefined 因為在function作用域外不能訪問
alert(person1.getName());//sj
在function里面的name,由于是在function作用域中,所以外部無法訪問,但是可以通過創(chuàng)建person對象,調(diào)用person的方法,來達(dá)到修改和訪問name值的目的,類似于java類中的私有變量,外部無法訪問,只能通過類方法訪問。
再看一個私有變量的例子:
var aaa = (function(){
var a = 1;
function bbb(){
a++;
alert(a);
}
function ccc(){
a++;
alert(a);
}
return {
b:bbb, //json結(jié)構(gòu)
c:ccc
}
})();
alert(aaa.a)//undefined
aaa.b(); //2
aaa.c() //3
總結(jié):
1、閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù),創(chuàng)建閉包的最常見的方式就是在一個函數(shù)內(nèi)創(chuàng)建另一個函數(shù),通過另一個函數(shù)訪問這個函數(shù)的局部變量。閉包的缺點就是常駐內(nèi)存,會增大內(nèi)存使用量,使用不當(dāng)很容易造成內(nèi)存泄露。
2、不必糾結(jié)到底怎樣才算閉包,其實你寫的每一個函數(shù)都算作閉包,即使是全局函數(shù),你訪問函數(shù)外部的全局變量時,就是閉包的體現(xiàn)。
以上所述是小編給大家介紹的對js閉包理解和動畫詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
javascript html 靜態(tài)頁面?zhèn)鲄?shù)
靜態(tài)頁面中用js獲取頁面參數(shù)的一些屬性方法,具體的獲取參數(shù),可以搜索本站以前的一些文章。2009-04-04
JavaScript中SQL語句的應(yīng)用實現(xiàn)
最近一直在用javascript在做項目 可是做著做著 感覺很多功能代碼都是重復(fù)的。2010-05-05
使用bootstrap-paginator.js 分頁來進(jìn)行ajax 異步分頁請求示例
本篇文章主要介紹了使用bootstrap-paginator.js 分頁來進(jìn)行ajax 異步分頁請求示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
layer實現(xiàn)彈出層自動調(diào)節(jié)位置
今天小編就為大家分享一篇layer實現(xiàn)彈出層自動調(diào)節(jié)位置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09

