作用域鏈及其相關概念
阿新 • • 發佈:2018-12-26
//作用域鏈 var title ="鏈條"; function f1(){ console.log("f1"+title); function f2(){ console.log("f2"+title); function f3(){ console.log("f3"+title); } f3();//f3鏈條 } f2();//f2鏈條 } f1();//f1鏈條
定義:
變數在當前環境,內部環境,內部深層環境都其作用的現象形成了一個鏈條,這個鏈條就被稱為變數的“作用域鏈”
特點:外部環境變數,可以給內部環境使用
作用域鏈的作用
1.變數必須“先宣告,後使用”
函式可以“先使用,後宣告”,原因是函式有預載入過程,本質還是函式宣告在前,使用在後
//變數必須"先宣告。後使用 " //同名的函式和變數的執行有順序問題 var getInfo = "school"; getInfo(); //itcast function getInfo(){ console.log("itcast") //Uncaught TypeError: getInfo is not a function }
2.內部環境可以訪問外部環境的變數,反之不然
var age = 20; function f1(){ var height =170; console.log(age); //內環境,訪問外環境 變數 } f1(); console.log(height);//外環境訪問內環境變數(不允許)
3.變數的作用域是宣告時決定的,而不是執行時
var food = "milk"; function f1(){ console.log(food); //milk }function f2(){ var food = "brand"; f1(); } f2();
函式是在全域性宣告的,而呼叫時在f2內部環境呼叫的,由此可以發現,變數的作用域是宣告的時候決定的,而不是在執行時
活動物件 AO Active Object
1,js程式碼執行是有環境的
2,該環境定義了其有權訪問的其他資料
3,環境有一個與之相關的活動物件AO
4,環境中所有的變數和函式都是活動物件的屬性
5,全域性環境是最外圍的執行環境,活動物件是window物件
6,執行環境中的程式碼執行完畢後會被銷燬
執行環境以及順序優先順序
var height =175; //外部環境變數 function f1() { var height = 165; //外部環境變數 function f2(height) { //形參 var height = 190; console.log(height); function height() { //本環境函式 alert('skdjlks') } } f2(180); } f1();
優先順序 內部環境變數》》本環境函式》》》形參》》》 外部環境變數
全域性變數和區域性變數
全域性變數:全域性變數 其是活動物件 window的成員資訊
區域性變數:其在一定範圍內可以看做是"全域性變數",其在本環境,內部環境,內部深層環境都可以被訪問