js基礎 局部變量和全局變量 做用域鏈 形參是局部變量

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
相關文章
相關標籤/搜索