javascript基礎(chǔ)進(jìn)階_深入剖析執(zhí)行環(huán)境及作用域鏈
執(zhí)行環(huán)境
執(zhí)行環(huán)境定義了變量或函數(shù)有權(quán)訪問的其他函數(shù),決定了他們各自的行為。每個執(zhí)行環(huán)境都有一個與之關(guān)聯(lián)的變量對象。
變量對象
環(huán)境中定義的所有變量和函數(shù)都保存在這個對象中。
全局執(zhí)行環(huán)境
全局執(zhí)行環(huán)境是最外圍的一個執(zhí)行環(huán)境。在web瀏覽器中,全局執(zhí)行環(huán)境被認(rèn)為是Window對象,因此所有全局變量和函數(shù)都是作為window對象的屬性和方法創(chuàng)建的。
每個函數(shù)都有自己的執(zhí)行環(huán)境。
作用域鏈
當(dāng)代碼在一個環(huán)境中執(zhí)行,會創(chuàng)建變量對象的一個作用域鏈。
用途:保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)有序訪問。
特點:作用域鏈的前端始終是當(dāng)前執(zhí)行的代碼所在的環(huán)境的變量對象。如果這個環(huán)境是函數(shù),則將其活動對象作為變量對象?;顒訉ο笞铋_始只包含arguments對象。作用域的下一個變量對象來自包含環(huán)境,而再下個來自下一個包含環(huán)境。
var color ="blue"; function changeColor() { var anotherColor ="red"; function swapColors() { var tempColor = anotherColor; anotherColor = color; color = tempColor; } swapColors(); } changeColor();
如圖表示執(zhí)行環(huán)境,內(nèi)部環(huán)境可以通過作用域鏈訪問外部環(huán)境,但是外部環(huán)境不能訪問內(nèi)部環(huán)境中的變量和函數(shù)。每個環(huán)境都可以向上搜索作用域鏈,以查詢變量和函數(shù);但是不能向下搜索。
沒有塊級作用域 聲明變量
使用var聲明的變量會自動添加到最接近的環(huán)境中。如果省略var關(guān)鍵字,即會添加到全局環(huán)境中。
function add(num1,num2) { var sum = num1+num2; return sum; } var result= add(10,10) console.log(sum)
sum is not defined
function add(num1,num2) { sum = num1+num2; return sum; } var result= add(10,10) console.log(sum)
查詢標(biāo)識符
搜索過程從作用域鏈的前端開始,向上逐級查詢與給定名字匹配的標(biāo)識符,找到即終止搜索。即如果局部環(huán)境中存在著同名標(biāo)識符,就不會使用位于父環(huán)境中的標(biāo)志符。
var color ="red"; function getColor() { return color; } console.log(getColor())
var color ="red"; function getColor() { var color="green"; return color; } console.log(getColor())
參考:《javascript高級程序設(shè)計(第三版)》
以上這篇javascript基礎(chǔ)進(jìn)階_深入剖析執(zhí)行環(huán)境及作用域鏈就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實現(xiàn)HTML導(dǎo)航欄下拉菜單
這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)HTML導(dǎo)航欄下拉菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11