国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript執行環境及作用域鏈實例分析

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

本文實例講述了JavaScript執行環境及作用域鏈。分享給大家供大家參考,具體如下:

1、執行環境:

每個執行環境都有一個與之關聯的變量對象,環境中定義的所有變量和函數都保存在這個對象中。

執行環境包括全局執行環境和函數執行環境。

全局執行環境是最外圍的一個執行環境,在瀏覽器中,全局執行環境被認為是是window對象,所有全局變量和屬性都是作為window對象的屬性和方法創建的。

函數執行環境是指函數的執行環境,當執行流進入一個函數時,函數的環境會被推入一個環境棧中,在函數執行之后,棧將其環境彈出,將控制權返回到之前的執行環境。

2、作用域鏈:

當代碼在一個環境中執行時,會創建變量對象的一個作用域鏈。

作用域鏈的用途:保證對執行環境有權訪問的所有變量和函數的有序訪問。

作用域鏈的前端,始終是當前執行的代碼所在環境的變量對象,若此環境是函數,則將其活動對象作為變量對象。活動對象最開始時只包含一個變量,即arguments對象(該對象在全局環境中是不存在的),作用域鏈的下一個對象來自包含環境,再下一個變量則來自下一個包含環境,這樣一直延續到全局執行環境。全局執行環境的變量對象始終是作用域鏈的最后一個對象。

每個環境都可以向上搜索作用域鏈,以查詢變量和函數名,終點就是搜索到全局執行環境,但是任何環境不能通過向下搜索作用域鏈而進入另一個執行環境。內部環境可以通過作用域鏈訪問所有的外部環境,但外部環境不能訪問內部環境的任何變量和函數。

3、延長作用域鏈:

雖然執行環境只有兩種:全局執行環境和函數執行環境,但是可以有方法延長作用域鏈,因為有些語句可以在作用域鏈的前端臨時增加一個變量對象,該變量對象會在代碼執行后被移除。

當執行流進入下列語句時,作用域鏈會延長:

(1)try-catch語句的catch塊:catch語句會創建一個新的變量對象,其中包含的是被拋出的錯誤對象的聲明,該變量對象只在catch塊內部有效,在catch塊外部無法訪問到。

(2)with語句:with語句會將指定的對象添加到作用域鏈中。

eg1:

function setUrl(){  var parameter="?name=Alice";  var url = href + parameter;  return url;}var result = setUrl();alert(result);//報錯:href is no defined

eg2:

function setUrl(){  var parameter="?name=Alice"; with(location) { var url = href + parameter; }  return url;}var result = setUrl();alert(result);//http://localhost/text.html?name=Alice

with語句接收的是location對象,因此其變量對象中包含了location對象的所有屬性和方法,location對象被添加到了作用域鏈的前端。

eg3:

var obj = {href : "http://www.baidu.com"};var ;function setUrl(){  var parameter="?name=Alice"; with(obj) { ; var url = href + parameter; }  return url;}var result = setUrl();alert(result);//http://www.google.cn?name=Alicealert(href);//http://www.sina.cn

with語句中并沒有更改變量href的值,而是更改了obj對象的 href 屬性。

也就是說,with中首先查找的是相關對象的屬性,如果沒有,才改變變量的值。

eg4:

var obj = {};var ;function setUrl(){  var parameter="?name=Alice"; with(obj) { ; var url = href + parameter; }  return url;}var result = setUrl();alert(result);//http://www.google.cn?name=Alicealert(href);//http://www.google.cn

去掉obj對象的 href 屬性后,才更改變量href的值。

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普洱| 南郑县| 东乡| 都江堰市| 大庆市| 南岸区| 康平县| 丽水市| 噶尔县| 遵化市| 宜兰市| 道真| 庆城县| 庐江县| 福清市| 锡林郭勒盟| 福安市| 出国| 逊克县| 呈贡县| 镇江市| 张家界市| 徐汇区| 溧阳市| 观塘区| 樟树市| 宝坻区| 柳江县| 县级市| 农安县| 南雄市| 海门市| 大同县| 巍山| 团风县| 湘西| 新巴尔虎右旗| 平湖市| 呼玛县| 承德市| 环江|