執(zhí)行環(huán)境(execution context)是JS一個非常重要的概念吐葱。
執(zhí)行環(huán)境定義了變量或函數有權訪問的其他數據決定了他們的各自的行為端礼,每個執(zhí)行環(huán)境等都有與之關聯的的:變量對象(variable object)桑孩,環(huán)境中定義的所有{變量}和{函數}都保存在這個對象中。(JS是無法讀取內存的)我們編寫的代碼無法訪問這個對象 但是解析器會在處理數據的時候后臺使用它
全局執(zhí)行環(huán)境
JS宿主:運行的平臺(他是腳本語言嗎所以你懂得)
由于JS實現的宿主環(huán)境不同, 表示執(zhí)行環(huán)境也不一樣
web瀏覽器中全局---------window對象 知道了這個那么天天使用的變量啊十嘿,函數啊的全局 都是作為window對象的屬性和方法創(chuàng)建的
環(huán)境銷毀:
某個執(zhí)行環(huán)境所有代碼執(zhí)行完之后 該環(huán)境被銷毀 保存在其中的所有變量和函數定義也隨之銷毀(這個全局也就是關了瀏覽器或者程序的時候才被銷毀 )
局部執(zhí)行環(huán)境
棧:每個函數都有自己的執(zhí)行環(huán)境 當執(zhí)行流進入函數時玉罐,函數的環(huán)境就被推入一個環(huán)境棧中
而在函數執(zhí)行之后屈嗤,將其環(huán)境彈出, 把控制權返回之前的執(zhí)行環(huán)境-----------------ECMAScript中的執(zhí)行流(從上到下執(zhí)行)真有這個方便的機制控制著
環(huán)境執(zhí)行(作用域鏈)
當代碼在一個環(huán)境中執(zhí)行時,會創(chuàng)建變量對象的一個----------作用域鏈
用途:保證對執(zhí)行環(huán)境的有權訪問的所有變量和函數的有序訪問(上面執(zhí)行環(huán)境的概念)作用于鏈的前端-----始終是當前執(zhí)行代碼所在環(huán)境的變量對象(就是正在執(zhí)行的代碼 現在執(zhí)行的位置)
比如環(huán)境是函數 那么將其活動對象最為變量對象 活動對象在開始只包含一個變量 即{arguments對象}(注意全局環(huán)境中不存在arguments)那么作用域的下一個變量對象來自包含來自(外部)環(huán)境 吊输,而下一個則是來自下一個包含環(huán)境 這樣一直延續(xù)到全局執(zhí)行環(huán)境饶号; 全局環(huán)境始終是作用域鏈的最后一個對象(web瀏覽器中即是window)