全局變量與局部變量理解


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;

         淺顯的理解就是參數就是引用變量的值,在函數內部進行加工,其實不改變變量的值;(這里是值類型的參數傳遞情況可以這么理解);

         如果是引用類型的參數傳遞;就會影響到全局變量的值了;(這個和數據存儲有關);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM