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;
淺顯的理解就是參數就是引用變量的值,在函數內部進行加工,其實不改變變量的值;(這里是值類型的參數傳遞情況可以這么理解);
如果是引用類型的參數傳遞;就會影響到全局變量的值了;(這個和數據存儲有關);