javascript小白學習指南1---0

來源:互聯網
上載者:User

標籤:blog   http   color   java   io   strong   資料   for   

第二章 變數和範圍   在看第二章時我希望,你可以回顧一下前一次所講的內容  如果有所遺忘 點這裡
  今天我們來說說 變數和範圍的問題
本章主要內容
  • 基本類型和參考型別
  • 執行環境
  • 記憶體回收(瞭解即可)
基本類型和參考型別JS中可能包含兩種不同的資料類型的值:   基本類型  和 參考型別    基本類型值 指的是簡單的資料區段   而 參考型別指那些可能由多個值構成的對象。
如何定義基本類型值和參考型別值呢?  看下面
建立一個變數並給它賦值就OK了。  對於參考型別我們可以添加 和刪除它的屬性和方法
var csdn = new Object();csdn.blog = "Tomihaohao";alert(csdn.blog)   // Tomihaohaovar name ="csdn";name.age = 123;alert(name.age)  //undefined//同樣的一段方式的代碼為什麼 結果不一樣呢?

在JS中只能給參考型別的值添加動態屬性
我們在看一段代碼
var a =1;var b = a;alert(b);//-------------------------------------var obj1 = new Object();var obj2 = obj1;obj1.name = "csdn";alert(obj2.name)  //"csdn"//知道上面兩段代碼在解析器裡發生什麼了嗎?

兩張圖幫你解釋清楚


  傳遞參數:     還記得上一章講的函數的參數嗎?  我們來回顧一下JS 中的函數 參數是很靈活的,還記得arguments[] 嗎? 如果你忘記了 點擊這裡
  今天我要在來說一說JS中的參數
 請記住 JS 中函數的參數都是按值傳遞的      還記得我上面畫的圖嗎?  是的 把函數外部的值複製給函數內部的參數,就和把值從一個變數複製到另一個變數一樣
function addnum(param){   num +=10;   return num;}var a = 10;var b = addnum(a);alert(a);   //10alert(b);   //20//看 他們兩個是互不影響的

有人可能會疑問 拿要是參考型別還是這樣嗎? 
function setObj(obj){    obj.name = "csdn";    obj = new Object();    obj.name  = "Tomihaohao"}var T = new Object();setObj(T);alert(T.name);//是什麼呢? 沒錯依然是csdn //實際上這個局部對象,在函數執行完後就被kill了

新的工具 instanceof
記得上一章給大家介紹了一個 type of sth  對 就是 typeof 這個工具
但是 如果你遇到了參考型別又該怎麼辦呢?因為typeof 返回的都是object.
這裡給大家介紹 instanceof   具體的用法也很簡單
var person = []alert(person instanceof Array)//person 是 Array對象嗎? 當然是!

執行環境和範圍在javascript 中最重要的一個概念:執行環境!
  • 執行環境定義了變數和函數有權訪問的其他資料,決定了它們各自的行為
  • 每個執行環境都有一個與之關聯的 變數對象
  • 在瀏覽器中 window 對象是全域執行環境,它們只有在應用退出時才能銷毀
  • 每個函數都有自己的執行環境
  • 代碼在一個環境執行時,會建立物件變數的一個範圍
  • 標識符解析是沿著範圍一級一級的搜尋標識符的過程
var color = "white";function changeColor(){   var  anotherColor = "red";   function swapColors(){   var tempColor = anotherColor;   anotherColor = color;   color = tempColor;   //這裡可以訪問 color anotherColor tempColor}swaoColors();//這裡可以訪問color anotherColor}changeColor();//只能訪問到color

上面的代碼一共有三個執行環境,分別是全域環境 changeColor() 局部環境  swapColors() 局部環境,全域環境中有一個變數 color 而在 changeColor()中 有 anotherColor這個變數和 swapColors()這個函數,在swapColors()中有一個tempColor,至於為什麼有的地方訪問不到呢?
範圍鏈就是,內部環境可以通過它去訪問所有外部環境,但反過來確實不行的,每個環境都可以向上搜尋範圍鏈,來查詢變數和函數,但是他們不能向下搜尋
記住JS中沒有塊級範圍
javascript 和 C JAVA C#不一樣他是沒有自己的塊級範圍的,當然你可以通過一些方法來類比,這個我們後面會講到。
for(var i =0 ;i<10;i++){      console.log(i);}alert(i);  //i=10

如果是JAVA 那麼變數i會被立即銷毀,但在JS中呢!依然存在
js 中查詢標識符
var color ="blue";function getColor(){     //var volor ="red";      return color;}alert(getColor())  //blue//如果去掉 getColor()中的注釋 那麼返回的就是red

沒錯,在js中 標識符會沿著範圍逐級的網上搜尋,直到找到為止
瀏覽器中的GC 記憶體回收其實這裡大家只要知道一個概念就行了,那就是  解除引用。
一旦資料不再有用,最好將其設定為null來釋放其引用
//向這樣var a ="csdn ";//沒用啦a = null//解除引用

總結
  •  從一個變數複製到另一個變數的 具體過程,會建立這個值的副本
  • 參考型別的值是對象,儲存在堆記憶體中
  • 參考型別值的變數其實是一個指標
  • 參考型別的複製實質上是複製了一個指標他們同時指向同一個對象
  • 學習了新的工具instanceof 
  • 學習了範圍鏈
  • 瞭解了GC



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.