Js筆記-第11課
// 第11課
作用域精解
運行期上下文,當函數執行時,會創建一個成為執行期上下文的內部對象。一個執行期上下文定義了一個函數執行時的環境,函數每次執行時對應的執行期上下文都是獨一無二的,所以多次調用一個函數會導致創建多個執行期
上下文,當函數執行完畢,他所產生的執行上下文被銷毀
查找變量:從作用域的頂端依次向下查找
作用域
[[scope]]]每個javascript函數都是一個對象,對象中有些屬性我們可以訪問,但是有些不可以,這些屬性僅供javascript
引擎存取,[[scope]]就是其中一個
[[scope]]指的就是我們所說的作用域,其中存儲了運行期上下文的集合
作用域鏈;[[scope]]中所存儲的執行期上下文對象的集合,這個集合呈鏈式鏈接,我們把這種鏈式鏈接叫做作用域鏈
javascript執行環境(執行期上下文)
當js控制器(control)進入可執行代碼時,控制器會進入一個執行環境,活動的多個執行環境構成執行環境棧,最上面的是正在運行的執行環境,當控制器進入一個新的執行環境時,新的執行環境被放到棧最頂端。
執行環境包含以下三個組件:
組件 作用目的
詞法環境 執行環境內的代碼創建的標識符引用的一個詞法環境對象
變量環境 執行環境內的代碼通過變量表達式和函數表達式創建的綁定的一個詞法環境對象。
this綁定 指定該執行環境內的this關鍵字所關聯的值。
立即執行函數
針對初始化功能的函數
只有表達式才能被執行符號執行,(將函數變為表達式,函數執行完立即釋放,達到立即執行函數的結果)
被執行符號執行的表達式, 名字被自動忽略(放棄)。
不是最初語法,實踐中,利用了()的特性
(function(){}()) 標準寫法
(function(){})()
+ - ! function test(){} ()
var a = function( ){} ()
試題
function text(a,b,c,d){
console.log(a + b + c + d)
}(1,2,3,4);
不報錯 不執行
系統執行結果
function text(a,b,c,d){
console.log(a + b + c + d)
}
上下分開
(1,2,3,4);
Js筆記-第11課