1、什么是閉包
站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到南陵網(wǎng)站設(shè)計(jì)與南陵網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋南陵地區(qū)。
閉包,官方對(duì)閉包的解釋是:一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。閉包的特點(diǎn):
1. 作為一個(gè)函數(shù)變量的一個(gè)引用,當(dāng)函數(shù)返回時(shí),其處于激活狀態(tài)。
2. 一個(gè)閉包就是當(dāng)一個(gè)函數(shù)返回時(shí),一個(gè)沒(méi)有釋放資源的棧區(qū)。
簡(jiǎn)單的說(shuō),Javascript允許使用內(nèi)部函數(shù)—即函數(shù)定義和函數(shù)表達(dá)式位于另一個(gè)函數(shù)的函數(shù)體內(nèi)。而且,這些內(nèi)部函數(shù)可以訪(fǎng)問(wèn)它們所在的外部函數(shù)中聲明的所有局部變量、參數(shù)和聲明的其他內(nèi)部函數(shù)。當(dāng)其中一個(gè)這樣的內(nèi)部函數(shù)在包含它們的外部函數(shù)之外被調(diào)用時(shí),就會(huì)形成閉包。
2、閉包的幾種寫(xiě)法和用法
首先要明白,在JS中一切都是對(duì)象,函數(shù)是對(duì)象的一種。下面先來(lái)看一下閉包的5種寫(xiě)法,簡(jiǎn)單理解一下什么是閉包。后面會(huì)具體解釋。
//第1種寫(xiě)法
function Circle(r) {
this.r = r;
}
Circle.PI = 3.14159;
Circle.prototype.area = function() {
return Circle.PI * this.r * this.r;
}
var c = new Circle(1.0);
alert(c.area());
這種寫(xiě)法沒(méi)什么特別的,只是給函數(shù)添加一些屬性。
//第2種寫(xiě)法
var Circle = function() {
var obj = new Object();
obj.PI = 3.14159;
obj.area = function( r ) {
return this.PI * r * r;
}
return obj;
} //在此我向大家推薦一個(gè)前端全棧開(kāi)發(fā)交流圈:619586920 突破技術(shù)瓶頸,提升思維能力
var c = new Circle();
alert( c.area( 1.0 ) );
這種寫(xiě)法是聲明一個(gè)變量,將一個(gè)函數(shù)當(dāng)作值賦給變量。
//第3種寫(xiě)法
var Circle = new Object();
Circle.PI = 3.14159;
Circle.Area = function( r ) {
return this.PI * r * r;
}
alert( Circle.Area( 1.0 ) );
這種方法最好理解,就是new 一個(gè)對(duì)象,然后給對(duì)象添加屬性和方法。
//第4種寫(xiě)法
var Circle={
"PI":3.14159,
"area":function(r){
return this.PI * r * r;
} //在此我向大家推薦一個(gè)前端全棧開(kāi)發(fā)交流圈:619586920 突破技術(shù)瓶頸,提升思維能力
};
alert( Circle.area(1.0) );
這種方法使用較多,也最為方便。var obj = {}就是聲明一個(gè)空的對(duì)象。
//第5種寫(xiě)法
var Circle = new Function("this.PI = 3.14159;this.area = function( r ) {return r*r*this.PI;}");
alert( (new Circle()).area(1.0) );
說(shuō)實(shí)話(huà),這種寫(xiě)法我是沒(méi)用過(guò),大家可以參考一下。
總的來(lái)說(shuō),上面幾種方法,第2中和第4中較為常見(jiàn),大家可以根據(jù)習(xí)慣選擇。
上面代碼中出現(xiàn)了JS中常用的Prototype,那么Prototype有什么用呢?下面我們來(lái)看一下:
var dom = function(){
};
dom.Show = function(){
alert("Show Message");
};
dom.prototype.Display = function(){
alert("Property Message");
};
dom.Display(); //error
dom.Show();
var d = new dom();
d.Display();
d.Show(); //error
我們首先聲明一個(gè)變量,將一個(gè)函數(shù)賦給他,因?yàn)樵贘avascript中每個(gè)函數(shù)都有一個(gè)Portotype屬性,而對(duì)象沒(méi)有。添加兩個(gè)方法,分別直接添加和添加打破Prototype上面,來(lái)看下調(diào)用情況。分析結(jié)果如下:
1、不使用prototype屬性定義的對(duì)象方法,是靜態(tài)方法,只能直接用類(lèi)名進(jìn)行調(diào)用!另外,此靜態(tài)方法中無(wú)法使用this變量來(lái)調(diào)用對(duì)象其他的屬性!
2、使用prototype屬性定義的對(duì)象方法,是非靜態(tài)方法,只有在實(shí)例化后才能使用!其方法內(nèi)部可以this來(lái)引用對(duì)象自身中的其他屬性!
本次給大家推薦一個(gè)免費(fèi)的學(xué)習(xí)圈,里面概括移動(dòng)應(yīng)用網(wǎng)站開(kāi)發(fā),css,html,webpack,vue node angular以及面試資源等。**獲取資料
網(wǎng)頁(yè)題目:深入解析Javascript閉包及實(shí)現(xiàn)方法
文章源于:http://chinadenli.net/article20/jiiejo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站策劃、用戶(hù)體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)