一、在JS中,做用域就是指 執行代碼的上下文。函數
二、有三種類型的做用域:spa
三、在全局做用域中定義的變量,從任何地方均可以訪問,由於它是做用域鏈中最高層(最後一個)。它的生命週期將跨越整個程序。在JavaScript中沒有使用 var 關鍵字聲明的變量都是全局變量。code
四、在函數內部使用 var 定義的變量,其做用域是局部做用域,局部做用域 只對該函數的其餘表達式是「可見的」,包括嵌套/子函數中的代碼。函數的參數、以及arguments對象,都是屬於局部做用域。對象
//全局做用域 var myVal = 0; var func = function(){ //局部做用域 var myVal = 1; var myFunc = function(){ //局部做用域 var myVal = 2; } } //eval做用域 eval('var a = 3');
五、JavaScript中,沒有塊級做用域。如 if/for 沒法建立做用域,所以變量能夠相互覆蓋(除ES6中新語法)。blog
六、在函數中聲明局部變量,必須使用 var 關鍵字,不然變量將會是全局變量。在函數體內 ,局部變量的優先級比同名的全局變量高。生命週期
七、做用域在函數定義時確認,而非調用時。這也叫詞法做用域。ip
八、動態做用域 只存在於代碼執行過程當中作用域