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

首頁 > 語言 > JavaScript > 正文

JavaScript高級程序設計(第3版)學習筆記8 js函數(中)

2024-05-06 14:21:10
字體:
來源:轉載
供稿:網友
6、執行環境和作用域

(1)執行環境(execution context):所有的JavaScript代碼都運行在一個執行環境中,當控制權轉移至JavaScript的可執行代碼時,就進入了一個執行環境。活動的執行環境從邏輯上形成了一個棧,全局執行環境永遠是這個棧的棧底元素,棧頂元素就是當前正在運行的執行環境。每一個函數都有自己的執行環境,當執行流進入一個函數時,會將這個函數的執行環境壓入棧頂,函數執行完之后再將這個執行環境彈出,控制權返回給之前的執行環境。

(2)變量對象(variable object):每一個執行環境都有一個與之對應的變量對象,執行環境中定義的所有變量和函數就是保存在這個變量對象中。這個變量對象是后臺實現中的一個對象,我們無法在代碼中訪問,但是這有助于我們理解執行環境和作用域相關概念。

(3)作用域鏈(scope chain):當代碼在一個執行環境中運行時,會創建由變量對象組成的一個作用域鏈。這個鏈的前端,就是當前代碼所在環境的變量對象,鏈的最末端,就是全局環境的變量對象。在一個執行環境中解析標識符時,會在當前執行環境相應的變量對象中搜索,找到就返回,沒有找到就沿著作用域鏈一級一級往上搜索直至全局環境的變量對象,如果一直未找到,就拋出引用異常。

(4)活動對象(activation object):如果一個執行環境是函數執行環境,也將變量對象稱為活動對象。活動對象在最開始只包含一個變量,即arguments對象(這個對象在全局環境的變量對象中不存在)。

  這四個概念雖然有些抽象,但還是比較自然的,可以結合《JavaScript高級程序設計(第3版)》中的一個例子來細細體會一下:
代碼如下:
// 進入到全局作用域,創建全局變量對象
var color = "blue";

function changeColor(){
// 進入到changeColor作用域,創建changeColor相應變量對象
var anotherColor = "red";

function swapColors(color1, color2){
// 進入到swapColors作用域,創建swapColors相應變量對象
var tempColor = anotherColor;
anotherColor = color;
color = tempColor;
/*
* swapColors作用域內可以訪問的對象有:
* 全局變量對象的color,changeColor
* changeColor函數相應變量對象的anotherColor、swapColors
* swapColors函數相應變量對象的tempColor
*/
}
swapColors('white');
/*
* changeColor作用域內可以訪問的對象有:
* 全局變量對象的color,changeColor
* changeColor函數相應變量對象的anotherColor、swapColors
*/
}

changeColor();
/*
* 全局作用域內可以訪問的對象有:
* 全局變量對象的color,changeColor
*/

這里的整個過程是:

(1)進入全局環境,創建全局變量對象,將全局環境壓入棧頂(這里也是棧底)。根據前面的關于聲明提升的結論,這里創建全局變量對象可能的一個過程是,先創建全局變量對象,然后處理函數聲明設置屬性changeColor為相應函數,再處理變量聲明設置屬性color為undefined。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 开封市| 边坝县| 扎囊县| 铜川市| 黄浦区| 宁阳县| 紫云| 东兴市| 玉田县| 来安县| 莒南县| 同德县| 东城区| 六盘水市| 宁强县| 东兰县| 杭州市| 微山县| 六枝特区| 迁西县| 巴林左旗| 仁寿县| 南涧| 白山市| 砚山县| 双江| 大埔区| 赞皇县| 如东县| 开原市| 汶上县| 兰坪| 大田县| 黎城县| 五家渠市| 高雄市| 东方市| 武隆县| 西藏| 蕲春县| 杂多县|