//做用域鏈 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鏈條
定義: 函數
變量在當前環境,內部環境,內部深層環境都其做用的現象造成了一個鏈條,這個鏈條就被稱爲變量的「做用域鏈」spa
特色:外部環境變量,能夠給內部環境使用code
做用域鏈的做用對象
1.變量必須「先聲明,後使用」blog
函數能夠「先使用,後聲明」,緣由是函數有預加載過程,本質仍是函數聲明在前,使用在後作用域
//變量必須"先聲明。後使用 " //同名的函數和變量的執行有順序問題 var getInfo = "school"; getInfo(); //itcast function getInfo(){ console.log("itcast") //Uncaught TypeError: getInfo is not a function }
2.內部環境能夠訪問外部環境的變量,反之否則get
var age = 20; function f1(){ var height =170; console.log(age); //內環境,訪問外環境 變量 } f1(); console.log(height);//外環境訪問內環境變量(不容許)
3.變量的做用域是聲明時決定的,而不是運行時it
var food = "milk"; function f1(){ console.log(food); //milk } function f2(){ var food = "brand"; f1(); } f2();
函數是在全局聲明的,而調用時在f2內部環境調用的,由此能夠發現,變量的做用域是聲明的時候決定的,而不是在運行時io
活動對象 AO Active Objectconsole
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的成員信息
局部變量:其在必定範圍內能夠看作是"全局變量",其在本環境,內部環境,內部深層環境均可以被訪問