js進階第五天

一袒啼、數(shù)組的常見操作

pop() 刪除最后一個

shift() 刪除第一個

push() 追加 添加到最后面

unshift() 添加到 第一個位置

二座慰、閉包技術(shù)詳解

1.1 什么是閉包

  • 閉包實際上是一種函數(shù),所以閉包技術(shù)也是函數(shù)技術(shù)的一種;閉包能做的事情函數(shù)幾乎都能做挖垛。

  • 閉包技術(shù)花式比較多次伶,用法也比較靈活,一般開發(fā)人員在學習閉包的時候都會遇到瓶頸帆卓,主要是因為閉包技術(shù)的分界線并不明顯巨朦。幾乎無法用一個特點去區(qū)分。

  • 當一個內(nèi)部函數(shù)被其外部函數(shù)之外的變量引用時剑令,就形成了一個閉包糊啡。

    function A(){
       function B(){
           console.log("Hello XMG!");
       }
       return B;
    }
    var b = A();
    b();//Hello XMG!
    
  • 閉包的最大用處有兩個:一個是可以讀取函數(shù)內(nèi)部的變量,另一個就是讓這些變量的值始終保持在內(nèi)存中吁津。

**1.2 **封閉作用域

  • JavaScript的GC機制

    • 在javascript中棚蓄,如果一個對象不再被引用,那么這個對象就會被GC回收碍脏,否則這個對象一直會保存在內(nèi)存中梭依。
  • 封閉作用域

    • 封閉作用域又稱值為封閉空間,還有一個昵稱叫小閉包典尾,以及匿名函數(shù)自調(diào)役拴。

    • 基本結(jié)構(gòu):

      
      (function(){})();
      ;(function(){})();
      +(function(){})();
      -(function(){})();
      ?(function(){})();
      
  • **技術(shù)最大目的: 全局變量私有化 **

  • 技術(shù)優(yōu)點:

    • 不污染全局空間钾埂!

    • 內(nèi)部所有的臨時變量執(zhí)行完畢都會釋放不占內(nèi)存河闰。

    • 可以保存全局數(shù)據(jù)。

    • 更新復雜變量褥紫。

1.3 作用域鏈

  • 嵌套之間的函數(shù)會形成作用域鏈淤击,每次對變量的訪問實際上都是對整條作用域鏈的遍歷查找。先查找最近的作用域故源,最后再查找全局作用域污抬。如果在某個作用域找到了對量就會結(jié)束本次查找過程。
  • **對于作用域全局作用域查找快,還是局部作用域查找快印机? **
  • 局部作用域查找要遠遠大于全局作用域查找的速度矢腻。所以高級的程序設(shè)計一般是盡量避免全局查找。
  • 每次訪問都是對作用域鏈的一次遍歷查找其中全局作用域是最耗費時間的射赛。
  • 解決方案:
    • 當前目標使用完以后多柑,在退出作用域之前儲存這個目標,就可以在下次取到上一次的目標楣责。
  • 補充:

    變量的生命周期
    任何一個變量在內(nèi)存中都是一個引用竣灌,這個變量是有自己的生命周期。周期結(jié)束意味著被銷毀秆麸。 一個變量在它當前的作用域內(nèi)被聲明那一刻相當于變量出生初嘹,整個當前作用域執(zhí)行完畢并退出作用域相當于變量的壽命終止。

1.4 保存作用域

  • 保存作用域是一種更高級的閉包技術(shù)沮趣,如果函數(shù)嵌套函數(shù)屯烦,那么內(nèi)部的那個函數(shù)將形成作用域閉包。簡單的說房铭,這種閉包能夠達到的好處就是讓指令能夠綁定一些全局數(shù)據(jù)去運行驻龟;

  • 基本結(jié)構(gòu):

     var A=function(){
         return function(){};
     }
  • 優(yōu)點:

    • 全局數(shù)據(jù)隱藏化

    • 可以讓某個指令運行時候綁定一些隱藏的全局數(shù)據(jù)在身上。

  • 一句話: 將數(shù)據(jù)綁定在指令上運行缸匪,讓指令不再依賴全局數(shù)據(jù)翁狐。

三、面向?qū)ο?/h3>

對象是什么凌蔬?
對象就是帶有屬性和方法的數(shù)據(jù)類型谴蔑!

任何一門高級語言都要面向?qū)ο螅琂avaScript則是基于原型的面向?qū)ο笳Z言龟梦,因此,我們的思維要由面向過程轉(zhuǎn)向面向?qū)ο?/strong>:

Snip20161217_2.png

面向?qū)ο螅?/strong>

面向?qū)ο罄锩妫侯惡蛯ο?/p>

類是對象的抽象窃躲,而對象是類的具體實例

一切事物皆對象 JavaScript 一切皆對象


 類 和 對象

 對象 女朋友
 小白 你有對象了嗎计贰? 泛指 女朋友
 昨天陪你打LOL的那個女生是你對象嗎? 特指 某一個女朋友

 在座的有喜歡吃香蕉的嗎蒂窒?
 你手中那根香蕉熟了嗎躁倒? 特指對象(具體的實例)

面向?qū)ο蟮奶匦裕?/strong>

  • 抽象

    • 抽象就是忽略一個主題中與當前目標無關(guān)的那些方面,以便更充分地注意與當前目標有關(guān)的方面洒琢。
  • 封裝

    • 封裝是把過程和數(shù)據(jù)封閉起來秧秉,對數(shù)據(jù)的訪問只能通過開放的接口。
  • 繼承

    • 子類對象繼承使用父類的屬性和方法衰抑。
  • 多態(tài)

    • 多態(tài)是指兩個或多個屬于不同類的對象象迎,對于同一個消息(方法調(diào)用)作出不同響應的方式。

2.1 構(gòu)造函數(shù)

所有的構(gòu)造函數(shù)有一個特點:首字母大寫;

在js中我們可以理解為只要執(zhí)行以后能夠返回新的對象的函數(shù)就是構(gòu)造函數(shù)砾淌。

構(gòu)造函數(shù)技巧的最大目的:創(chuàng)造完全獨立的對象啦撮,互相之間不影響。

2.2 關(guān)鍵詞new

  • 將一個函數(shù)變成對象并返回

  • 在這個函數(shù)的內(nèi)部將this指向函數(shù)本身汪厨。

  • new這個關(guān)鍵詞實際上能夠?qū)⑷魏魏瘮?shù)直接變成一個對象赃春。它只有在和構(gòu)造函數(shù)配合的時候才有用,它相當于可以化簡構(gòu)造函數(shù)自己創(chuàng)造對象和返回對象的步驟劫乱。

2.3 構(gòu)造器(constructor) 和 原型屬性 (prototype)

在任何一個對象中都有構(gòu)造器和原型屬性织中,包括原生的對象,比如: Date, Array等衷戈;

  • constructor 返回對創(chuàng)建此對象的 構(gòu)造函數(shù)的引用

  • prototype 讓我們有能力向?qū)ο筇砑訉傩院头椒?/strong>

    prototype它的作用就是構(gòu)造函數(shù)的一個共享庫狭吼;在這個共享庫里面存儲的所有數(shù)據(jù)將來都會被所有的新對象公用。 這樣大大降低了創(chuàng)建方法的成本脱惰。

  • 原型共享庫是誰使用的搏嗡?

    • 構(gòu)造函數(shù)使用原型庫,所有將來的對象共享這個原型庫拉一。
    • 如果把方法都寫在構(gòu)造函數(shù)的原型庫里面采盒,將來還可以通過原型繼續(xù)拓展。 蔚润、
  • 原型的工作原理

    • 在網(wǎng)頁發(fā)布以后磅氨,原型的工作會自動做以下兩件事情:
    第一:自動將原型庫中的所有內(nèi)容都放在將來的對象身上;
    第二:如果共享庫中的內(nèi)容發(fā)生變化會自動更新所有對象上的數(shù)據(jù)嫡纠。
  • 注意:

    • 在面向?qū)ο蟮膶懛ó斨蟹匙猓偷墓蚕韼炖锩嫠械姆椒ㄖ械膖his默認情況都會指向?qū)淼膶ο蟆?/p>

    • 只有在兩個情況會發(fā)生變化,那么這兩個情況一定要檢查作用域:

     第一:如果在事件的作用域中除盏,this的指向會變成事件源叉橱。
     第二:如果在定時器的作用域中,this的指向會變成window者蠕。
![28731-106.jpg](http://upload-images.jianshu.io/upload_images/9199255-77b4be5ae7224219.jpg?imageMogr2/auto-
orient/strip%7CimageView2/2/w/1240)
![50216-106.jpg](http://upload-images.jianshu.io/upload_images/9199255-c2b2b3b0114855ca.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窃祝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子踱侣,更是在濱河造成了極大的恐慌粪小,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抡句,死亡現(xiàn)場離奇詭異探膊,居然都是意外死亡,警方通過查閱死者的電腦和手機待榔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門逞壁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事猾担∠疲” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵绑嘹,是天一觀的道長稽荧。 經(jīng)常有香客問我,道長工腋,這世上最難降的妖魔是什么姨丈? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮擅腰,結(jié)果婚禮上蟋恬,老公的妹妹穿的比我還像新娘。我一直安慰自己趁冈,他們只是感情好歼争,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渗勘,像睡著了一般沐绒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旺坠,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天乔遮,我揣著相機與錄音,去河邊找鬼取刃。 笑死蹋肮,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的璧疗。 我是一名探鬼主播坯辩,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼崩侠!你這毒婦竟也來了漆魔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤啦膜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后淌喻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僧家,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年裸删,在試婚紗的時候發(fā)現(xiàn)自己被綠了八拱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肌稻,靈堂內(nèi)的尸體忽然破棺而出清蚀,到底是詐尸還是另有隱情,我是刑警寧澤爹谭,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布枷邪,位于F島的核電站,受9級特大地震影響诺凡,放射性物質(zhì)發(fā)生泄漏东揣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一腹泌、第九天 我趴在偏房一處隱蔽的房頂上張望嘶卧。 院中可真熱鬧,春花似錦凉袱、人聲如沸芥吟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钟鸵。三九已至,卻和暖如春配深,著一層夾襖步出監(jiān)牢的瞬間携添,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工篓叶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烈掠,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓缸托,卻偏偏與公主長得像左敌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俐镐,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 繼承 一霜瘪、混入式繼承 二、原型繼承 利用原型中的成員可以被和其相關(guān)的對象共享這一特性涧狮,可以實現(xiàn)繼承帖世,這種實現(xiàn)繼承的...
    magic_pill閱讀 1,062評論 0 3
  • 1,javascript 基礎(chǔ)知識 Array對象 Array對象屬性 Arrray對象方法 Date對象 Dat...
    Yuann閱讀 903評論 0 1
  • 原文:http://dmitrysoshnikov.com/ecmascript/javascript-the-c...
    jaysoul閱讀 474評論 0 0
  • 作者:Dmitry A. Soshnikov編譯地址:http://dmitrysoshnikov.com/ecm...
    IT程序獅閱讀 3,341評論 2 12
  • 1. 用var操作符聲明的變量與省略var操作符聲明的變量的區(qū)別 在JavaScript中,是通過var關(guān)鍵字來聲...
    科研者閱讀 1,044評論 0 8