亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript作用域、閉包、對象與原型鏈概念及用法實例總結

2019-11-19 13:12:31
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript作用域、閉包、對象與原型鏈概念及用法。分享給大家供大家參考,具體如下:

1 JavaScript變量作用域

1.1 函數作用域

沒有塊作用域:即作用域不是以{}包圍的,其作用域完成由函數來決定,因而if /for等語句中的花括號不是獨立的作用域。

如前述,JS的在函數中定義的局部變量只對這個函數內部可見,稱之謂函數作用域。

嵌套作用域變量搜索規則:當在函數中引用一個變量時,JS會搜索當前函數作用域,如果沒有找到則搜索其上層作用域,一直到全局作用域。

var value = 'global';var f1 = function(){ console.log(v1); //global};f1();var f2 = function(){ var v1 ='local'; console.log(v1); //local};f2();

詞法作用域規則:函數的嵌套關系是定義時決定的,而非調用時決定的,即詞法作用域,即嵌套關系是由詞法分析時確定的,而非運行時決定。

var v1 = 'global';var f1 = function(){ console.log(v1);}f1(); //globalvar f2 = function(){ var v1 = 'local'; f1();};f2(); //global

對于這兩個規則的相互作用,函數內無論什么位置定義的局部變量,在進入函數時都是已經定義的,但未初始化,即為undefined,直到運行到變量被賦值時才被初始化,因此若訪問了未初始化的變量,我們會得到undefined的說明。

var v1 = 'global';var f = function(){ console.log(v1); //undefined var v1 = 'local';};

1.2 全局作用域

全局作用域的變量是全局對象的屬性,不論在什么函數中都可以直接訪問,而不需要通過全局對象,但加上全局對象,可以提供搜索效率。

滿足下列條件的變量屬于全局作用域:

  • 在最外層定義的變量
  • 全局對象的屬性
  • 任何地方隱匿定義的變量。

2 閉包

2.1 裝飾的定義

function f1(){ //context define function f2(){ //func define }; return f2;};f2(); //獲得f1中的context

在類似C/C++這種的非函數式編程語言中,我們也可以定義函數指針并返回,但外層函數在執行結束后為內層函數定義的上下文信息會被銷毀,而在閉包中,則保存了返回的函數,還包含返回函數的上下文信息。(由詞法作用域所支持)而且在返回閉包之后,上下文信息即被單獨創建出來,從而可以生成多個互相獨立的閉包實例。

2.2 閉包的用途

閉包有兩個用途,一是方便實現嵌套的回調函數,二是隱藏對象的細節。

對于前者,NodeJS的編程風格已經可以說明問題,對二后者,對于函數內部的局部變量外部是不可見的,但可以提供訪問函數來訪問和修改相應的局部變量,從而實現OO封裝的意圖。

3 對象

在基于類型的語言中,對象是由類實例化,而JS是基于原型的系統,對象是由原型復制生成的。

3.1 對象的創建與訪問

JavaScript中的Object實際上就是一個由屬性組成的關聯數組,屬性由名稱和值組成??梢杂?code>new Object()或{}來創建對象。對于創建簡單對象,可以使用對象初始化器來創建對象,即由{}字面值來創建對象,對象的屬性名可以為加''的字符串,也可不加引號。這對JS來說沒有區別,訪問對象的屬性時,可以使用句點也可使用關聯數組['name'],后者的好處是當我們不知道對象屬性名時,可以由變量來作為關聯數組的索引。

3.2 構造函數

我們也可以通過自定義構造函數來生成對象,從而能實例化更多的對象。構造函數也是函數,我們需要用大寫的函數名即可。在函數中可以定義成員變量,成員函數等。

3.3 上下文對象

在JS中,上下文對象即this指針,即被調用函數所處的環境。其作用是在函數內部引用到調用它的對象本身。this的出現會之前介紹的靜態作用域產生影響,加入了動態的內容。

由例子可以看到,我們可以通過不同的變量引用函數,不同之處調用上下文。

傳遞與綁定上下文

JavaScript的函數可以通過CallApply來動態綁定到特定的上下文。

如果想永久的綁定上下文,可以使用bind函數,需要注意的是同一函數上的多次bind是沒有效果的。

var person = { name:'noname', getName:function(){console.log(this.name); }};var bill = {name:'Bill'};person.getName(); //nonamebill.getName = person.getName;bill.getName();   //Billname = 'JavaScript';func = person.getName;func();   //JavaScript

3.4 原型

創建對象時,我們應該在構造函數內定義一般成員,而是其原型定義成員函數。

下面我們會主要介紹原型鏈

JS中有兩個特殊的對象:Object與Function,它們都是構造函數,用于生成對象。

Object.prototype是所有對象的祖先,Function.prototype是所有函數的原型,包括構造函數。

可以將JS的對象分為三類:用戶創建對象,構造函數對象,原型對象。

所有對象中都有一個__proto__屬性,其指向此對象的原型。

構造函數對象有prototype,指向其原型對象,通過此構造函數創建對象時,新創建對象的__proto__屬性將會指向構造函數的prototype屬性。

原型對象有一個constructor屬性,指向它對應的構造函數。

function Foo() {}var obj = new Object();var foo = new Foo();

參考文獻:《Node.JS開發指南》

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美二区乱c黑人| 欧美日韩国产精品| 日韩在线播放av| 亚洲天堂开心观看| 91精品久久久久久久久久入口| 久久久国产精品视频| 国产精品成人一区二区三区吃奶| 色偷偷av一区二区三区| 国产精品成人v| 欧美与欧洲交xxxx免费观看| 在线播放日韩专区| 亚洲欧洲偷拍精品| 日韩女在线观看| 色999日韩欧美国产| 欧美成人在线影院| x99av成人免费| 亚洲自拍偷拍区| 欧美电影免费观看高清完整| 欧美日韩国产精品专区| 国产一区二区三区在线观看网站| 精品中文视频在线| 国产精品黄页免费高清在线观看| 最近2019中文免费高清视频观看www99| 亚洲视频专区在线| 国产精品专区一| 亚洲精品中文字幕有码专区| 久久99久国产精品黄毛片入口| 久久精品最新地址| 久久成人精品视频| 久久精品99久久久香蕉| 国产精品成人一区| 欧美激情高清视频| 日韩欧美主播在线| 亚洲精品一区二区在线| 欧美激情久久久久久| 日韩在线高清视频| 久青草国产97香蕉在线视频| 日韩精品在线播放| 亚州成人av在线| 久青草国产97香蕉在线视频| 亚洲国产成人精品一区二区| 精品日韩视频在线观看| 久99久在线视频| 日韩精品免费在线视频| 亚洲经典中文字幕| 欧美伊久线香蕉线新在线| 成人激情av在线| 日韩一区在线视频| 亚洲人成人99网站| 亚洲xxxx妇黄裸体| 91精品国产成人| 国产精品免费看久久久香蕉| 91嫩草在线视频| 深夜成人在线观看| 国产精品自产拍在线观看中文| 亚洲精品福利在线| 亚洲福利精品在线| 亚洲国产精品久久久久秋霞不卡| 日韩在线精品一区| 精品久久久91| 国内精品久久久久影院优| 欧美精品免费播放| 91老司机在线| 成人妇女免费播放久久久| 日韩中文娱乐网| 亚洲少妇中文在线| 国产免费久久av| 欧美精品久久久久久久久| 高潮白浆女日韩av免费看| 日韩欧美精品在线观看| 亚洲成人动漫在线播放| 91久久精品视频| 日韩综合视频在线观看| 91免费精品国偷自产在线| 国产精品久久久亚洲| www.日韩av.com| www.日韩av.com| 欧美电影免费观看| 国产手机视频精品| 亚洲国产福利在线| 国产亚洲精品美女| 国产伦精品一区二区三区精品视频| 欧美日韩高清区| 成人久久一区二区三区| 亚洲自拍偷拍视频| 亚洲欧美999| 久久777国产线看观看精品| 亚洲欧美精品一区二区| 国产精品久久久久久久av电影| 国产欧美精品va在线观看| 久久中文久久字幕| 国外成人在线播放| 久久男人的天堂| 亚洲国产美女精品久久久久∴| 日韩国产在线看| 日韩精品免费电影| 国产精品专区第二| 久久久久久久久久久免费精品| 亚洲综合日韩中文字幕v在线| 亚洲欧美www| 欧美精品亚州精品| 国产成人综合久久| 亚洲成人激情在线| 欧美福利视频网站| 97视频免费在线观看| 欧美大尺度在线观看| 一区二区三区四区精品| 亚洲电影免费观看高清完整版| 伊人青青综合网站| 狠狠爱在线视频一区| 国产亚洲一级高清| 欧美激情xxxxx| 亚洲tv在线观看| 国内精久久久久久久久久人| 亚洲一区二区中文| 亚洲精品欧美极品| 亚洲精品丝袜日韩| 亚洲国产精久久久久久| 国产精品最新在线观看| 国产精品黄页免费高清在线观看| 亚洲精品美女免费| 亚洲欧美精品中文字幕在线| 国产精品视频一区二区高潮| 久久久精品一区二区三区| 国产精品久久久久999| 欧美高清第一页| 久久视频在线观看免费| 久久精品99久久香蕉国产色戒| 色噜噜亚洲精品中文字幕| 色偷偷91综合久久噜噜| 久久久精品国产网站| 国产999视频| 少妇高潮久久77777| 亚洲女人天堂视频| 欧美激情高清视频| 国产成人精品日本亚洲| 欧美极品少妇全裸体| 欧美乱妇高清无乱码| 日韩在线观看免费av| 欧美午夜性色大片在线观看| 揄拍成人国产精品视频| 国产精品极品尤物在线观看| 日韩极品精品视频免费观看| 久久久www成人免费精品| 富二代精品短视频| 色偷偷偷综合中文字幕;dd| 97精品国产aⅴ7777| 日本欧美中文字幕| 亚洲国产精品99| 国内精品久久久久伊人av| 久久久免费精品| 亚洲少妇激情视频| 国产精品电影网站| 亚洲精品国产综合区久久久久久久| 欧美电影在线观看完整版| 久久久国产精品x99av| 色777狠狠综合秋免鲁丝| 日韩中文字幕国产| 亚洲精品久久久久久下一站| 在线观看国产成人av片| 久久久久久这里只有精品| 精品日韩中文字幕| 欧美精品九九久久| 中文字幕成人精品久久不卡|