javascript的變量、作用域

一、復制變量值
JavaScript有兩種類型值:基本類型值和引用類型值。這兩種類型值的復制結果是不一樣的。
基本類型值
1 var num1 = 5;
2 var num2 = num1;
 那麼num2的值將被賦為5,而且即便是刪除num1也不會對它造成影響。
引用類型值
1 var obj1 = new Object();
2 obj1.age = 5;
3 var obj2 = obj1;
 雖然obj2.age同樣為5,但其實obj1和obj2是指向同一對象,如果刪除obj1,那麼obj2也不存在。
 
二、參數傳遞
JavaScript中的參數傳遞都是按值傳遞的,即:在傳遞的過程中,將函數外的值復制給參數。
因此就會得出以下結果:
基本類型值
 
1 var num1 = 5;
2 function setValue(obj){
3     return obj += 10;
4 }
5 var num2 = setValue(num1);
6 alert(num1);//5
7 alert(num2);//15
 
 因為這是一個復制的過程,基本類型的復制不會對原值產生影響,所以在函數內對參數進行計算,並不會改變num1的值。
引用類型值
 
1 function setAge(obj){
2       obj.age = 15;
3 }
4 var john = new Object();
5 setAge(john );
6 alert(john.age);//15
 
 同理,因為應用類型值的復制,如果在函數中對參數進行重新復制,那麼對函數外的原值也會造成影響。
三、作用域
和java、c等一些語言不通,JavaScript是沒有塊級作用域的。所謂的塊級作用域,就是用{}抱起來的執行環境。
如:
 
1 (function(){
2     var i = 5;
3     if(i == 5){
4         var color = "blue";
5     }
6     alert(color);
7 })();
 
 相似代碼下,java中最終會報錯,因為if條件執行完後,color已經被銷毀。但是JavaScript能正常執行。
沒有塊級作用域並不代表沒有執行環境。
如以下代碼:
 
1 (function(){
2     var i = 5;
3     if(i == 5){
4        var color = "blue";
5     }
6 })();
7 alert(color);
 
 因為color是在函數內聲明的,函數結束後,函數的執行環境已經被銷毀,color同樣不存在,自然會報錯。

 

摘自 のんきネコ

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *