javascript的變數、範圍

來源:互聯網
上載者:User

一、複製變數值
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同樣不存在,自然會報錯。

 


摘自 のんきネコ

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.