js基礎 局部變量和全局變量 做用域鏈 形參是局部變量前端
局部變量和全局變量函數
局部變量:在一個做用域(定義域)內定義的變量就是這個做用域內的局部變量。只能在做用域內被訪問到。
全局變量:從廣義上來看,全局變量也是一種局部變量。全局變量定義在全局,因此也叫全局變量。能夠在任何地方都被訪問到。
spa
1 // b是在全局內部定義的變量,是全局變量,能夠在任何地方訪問到 2 var b = 2; 3 function fun(){ 4 // 在函數內部定義的變量是局部變量,只能在該做用域內訪問到 5 var a = 1; 6 console.log(a); 7 } 8 fun(); 9 console.log(b); 10 console.log(a); |
變量申明的原理:全局變量,在全局定義以後,會永久存在,任什麼時候候,任何位置訪問,都可以找到它。局部變量定義在函數內部的,函數定義的過程,並無真正的去定義這個局部變量,只有在執行函數的時候,纔會當即定義這個局部變量,執行完以後,變量就被當即銷燬了,在其餘的地方訪問變量的時候,找不到這個變量,因此會有一個引用錯誤,變量未定義。blog
1.4 做用域鏈ci
指的是咱們變量查找的一個規律:咱們能夠在不一樣的做用域內使用相同的標識符去命名變量。咱們在使用一個變量的時候,須要找到匹配的標識符,咱們有重複的,用哪個?若是在當前做用域有這個變量,就直接使用,若是當前做用域沒有這個變量定義,會一層一層的從本層往外依次查找,遇到第一個就直接使用。相似於就近原則。
當碰見一個變量時,JS引擎會從其所在的做用域依次向外層查找,查找會在找到第一個匹配的標識符的時候中止。在多層嵌套的做用域中能夠定義同名的標識符,發生「遮蔽效應」。
作用域
1 // 全局變量 2 var a = 1; 3 function fun1(){ 4 var a = 2; 5 function fun2(){ 6 var a = 3; 7 console.log(a); //由於本層有定義直接輸出3 8 function fun3(){ 9 console.log(a); //自己沒有a定義,會從本層出發依次向外查找,當找到定義時,直接執行。3 10 } 11 fun3(); 12 } 13 fun2(); 14 } 15 fun1(); 16 console.log(a); //1 |
若是變量聲明時,不寫var關鍵字,計算機會自動在全局做用域內給它進行一個聲明,局部變量就強制性的變成了全局變量。這種狀況是不合理,會形成一個全局變量的污染。因此,定義變量必須寫var關鍵字。
io
1 var a = 1; 2 // 至關於 3 // var a = 3; 4 function fun1(){ 5 a = 2; 6 function fun2(){ 7 a = 3; 8 console.log(a); //由於本層有定義直接輸出3 9 function fun3(){ 10 console.log(a); //自己沒有a定義,會從本層出發依次向外查找,當找到定義時,直接執行。3 11 } 12 fun3(); 13 } 14 fun2(); 15 } 16 fun1(); 17 console.log(a); |
1.5 形參是局部變量console
形參是局部變量,形參的做用域是它定義的函數的內部。
table
1 function fun(a){ 2 // 形參是局部變量 3 console.log(a); 4 } 5 fun(1); 6 console.log(a); WEB前端互動交流羣 434623999 |