function foo(a)foo(
2 );
讓我們把上面這段**的處理過程想象成一段對話,這段對話可能是下面這樣的。
引擎:我說作用域,我需要為 foo 進行rhs引用。你見過它嗎?
作用域:別說,我還真見過,編譯器那小子剛剛宣告了它。它是乙個函式,給你。
引擎:哥們太夠意思了!好吧,我來執行一下 foo 。
引擎:作用域,還有個事兒。我需要為 a 進行lhs引用,這個你見過嗎?
作用域:這個也見過,編譯器最近把它聲名為 foo 的乙個形式引數了,拿去吧。
引擎:大恩不言謝,你總是這麼棒。現在我要把 2 賦值給 a 。
引擎:哥們,不好意思又來打擾你。我要為 console 進行rhs引用,你見過它嗎?
作用域:咱倆誰跟誰啊,再說我就是幹這個。這個我也有, console 是個內建物件。
給你。引擎:麼麼噠。我得看看這裡面是不是有 log(..) 。太好了,找到了,是乙個函式。
引擎:哥們,能幫我再找一下對 a 的rhs引用嗎?雖然我記得它,但想再確認一次。
作用域:放心吧,這個變數沒有變動過,拿走,不謝。
引擎:真棒。我來把 a 的值,也就是 2 ,傳遞進 log(..) 。
作用域和作用域鏈
全域性作用域 全域性的變數執行環境 函式作用域 函式內部的變數執行環境 每個函式都有自己的執行環境,當執行流進入乙個函式時,函式的環境就會被推入乙個環境棧中。函式執行之後,棧將環境彈出,把控制權返回給之前的執行環境。全域性作用域只要頁面不解除安裝,就一直存在,不釋放。函式每次在呼叫時,都會形成乙個作...
作用域和作用域鏈
var a 10 function f1 x,y f1 console.log b 此時b輸出5,因為b 5為隱式的全域性變數 在函式外面使用var 宣告的變數都是全域性變數,作用範圍是程式執行的地方.全域性作用域 函式除外 函式的形參是區域性變數 在函式內部,不使用var 定義的變數,叫隱式全域性...
作用域和作用域鏈
執行環境定義了變數和函式有權訪問的其他資料,決定了他們各自的行為。每個執行環境都有與之對應的變數物件 variable object 儲存著該環境中定義的所有變數和函式。我們無法通過 來訪問變數物件,但是解析器在處理資料時會在後台使用到它。執行環境有全域性執行環境 也稱全域性環境 和函式執行環境之分...