全域性預處理與執行,作用域與作用域鏈

2021-09-28 15:54:35 字數 1686 閱讀 7683

一.全域性預處理

全域性預處理:首先會建立乙個詞法環境(lexical environment),然後掃面全域性裡用var宣告的變數和

用宣告的方式建立的函式即function ***()

函式表示式即var q=function()

掃瞄後把變數存入寫成 a:undefined 把函式寫成 ***:指向函式或對函式的乙個引用

二.全域性預處理與執行

js會從上往下掃瞄解讀js**

預處理掃瞄階段:先掃瞄var=a變數並js解析器儲存為a:undefined,和宣告的函式存為d:指向函式的引用。此時掃瞄完後即幾個alert都

彈出過後,遇到var a=1;則此時將先前存的undefined改為值1

執行階段:與預處理不同,直接掃瞄到c=2就直接存入顯示c:2

三.函式預處理與執行

對於函式的預處理與執行:首先會掃瞄函式的引數,再函式內部宣告式函式,再內部var變數

所以下面的首先詞法環境會存入引數a:1,b:2(因為引數已經傳入所以先掃瞄存入引數,若形參兩個為ab,而實參傳入乙個

則第二個引數值為undefined)

之後預處理,則函式內部宣告的函式命名與之前的引數衝突,函式覆蓋,故此時a由值1變為指向函式的引用,同時內

部var宣告的變數也有衝突為忽略,則b值依舊為2

預處理結束後執行階段:此時彈出的a為函式的引用,b為2

四.變數與函式命名衝突

函式為第一優先順序,碰到函式命名與其他有衝突會覆蓋,碰到變數與其他有衝突會忽略

五.作用域

js不是塊作用域,也無動態作用域,js是詞法作用域也可稱為靜態作用域或者閉包

建立函式時給函式新增乙個成員scope

六.作用域鏈

七.有關new function

建立函式的方式

第一:function f()。常用

第二:var g = function ()。常用

另第二:var g = function f(argument)。此處f訪問不到不常用

第三:var g = new function ("引數","函式體")

像之前所說的作用域鏈,用new function建立的函式作用域永遠指向全域性,而不是父函式

八.作用域用途

作用域用途:資訊隱藏,減少全域性變數及其命名衝突的發生

為了減少全域性變數,將全域性變數放入乙個匿名立即呼叫函式

更多專業前端知識,請上

【猿2048】www.mk2048.com

Python作用域 全域性作用域 區域性作用域

在python中,每個函式都會建立乙個作用域。pythonistas也可能稱函式擁有它們自己的命名空間 namespace 這意味著當在函式體裡遇到變數名 時,python首先在該函式的命名空間中查詢,python包含了一些讓我們檢視命名空間的函式。讓我們寫乙個簡單的函式來探查一下local和glo...

全域性作用域 塊級作用域

瀏覽器環境有一頂層物件window,window的屬性和var的全域性變數等價。如果用var設定了window物件的內建屬性作為變數,內建屬性值將會被覆蓋。如果是window物件的內建屬性,輸出預設值 非內建則輸出underfined。console.log window.name window.n...

深入作用域之靜態作用域與動態作用域

概念 靜態作用域指的是一段 在它執行之前就已經確定了它的作用域,簡單來說就是在執行之前就確定了它可以應用哪些地方的作用域 變數 動態作用域在 執行的時候才確定它的作用域的,以及作用域鏈。靜態作用域 var a 10 function fn fn 11 在建立函式fn的時候就已經確定了它可以作用那些變...