一.全域性預處理
全域性預處理:首先會建立乙個詞法環境(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的時候就已經確定了它可以作用那些變...