js 關於全局變量和局部變量的簡單理解
1.簡單來說在 函數里邊定義的變量是局部變量,在函數外邊訪問不到; 全局變量是在函數外邊的,在函數內外都可以被訪問;
var a = 10;
function test() {
var b = 100;
console.log(a);//打印結果是10
a=100; //a前面沒有var 所以這是全局變量。執行函數之后被賦值。
}
test();
console.log(a); //打印結果為100
console.log(b);//報錯 b is not defind
var a = 10; function test() { var b = 100; console.log(a);//打印結果是undefined var a=100; //a有var 所以這是局部變量。執行函數之后被賦值 } test(); console.log(a); //打印結果為10 console.log(b);//報錯 b is not definded
說明: 因為a 是全局變量所以在函數內部可以被訪問且被賦值;第一次打印結果為10;
執行函數后a的值變為100 ;
b是局部變量;在函數外部被打印,訪問不到b的值 所以報錯;
2.如果局部變量和全局變量的變量名相同的情況;
1 var a = 10;
2
3 function test() {
4
5 console.log(a);//打印結果為undefind
6 var a = 100;
7 console.log(a);//打印結果為100
8
9 }
10
11 test();
12
13 console.log(a);//打印結果為10
說明:1.如果局部變量的變量名和全局變量名形同,在函數內部變量值全部指向局部變量;
2.第5行結果為undefind;因為只要局部變量a被聲明,a就指向局部變量,但是打印在賦值之前,結果為undefind;
第二次打印結果在賦值之后 為100;
要想改變全局變量a 的值,可以用window.a ;
3.第三次打印在函數外邊,所以打印全局變量a,值為10;
3.關於參數問題;參數也是局部變量;
1 var a = 1;
2
3 function test(a) {
4
5 a=100;
6 console.log(a);//打印結果為100
7 return a;
8 }
9
10 test(a);
11 // a=test(a);
12
13 console.log(a);//打印結果為1
說明:函數的形參和全局變量重名;既然參數也是局部變量,那函數內部對於a的操作都指向局部變量a影響不了全局變量a,
所以13行輸出1;第5行輸出100;
淺顯的理解就是參數就是引用變量的值,在函數內部進行加工,其實不改變變量的值;(這里是值類型的參數傳遞情況可以這么理解);
如果是引用類型的參數傳遞;就會影響到全局變量的值了;(這個和數據存儲有關);

