javascript深度剖析之 【 var 關鍵字】。

來源:互聯網
上載者:User

javascript中的var關鍵字,作用很簡單。用於聲明一個變數。如果不給聲明的變數賦值則為undefined.

var test = 'test'; var t;

此時test值為,'test', t 的值為undefinde. 

似乎很簡單,並沒有什麼特殊的地方。只要學過js的,都知道。

那麼請看下面這段代碼的執行結果。

console.log(test);var test = 'test';console.log(test);

 

這樣先輸出了undefunde 然後輸出了test。很奇怪吧。相信很多朋友會以為會產生錯誤。

因為我們在輸出test時,它還未被定義。結果應該像輸出一個未定義的變數那樣被拋出錯誤才對。可是事實卻並非如此。

這是為什麼呢,原來JS在解析時var 會被預先解析。也就是說,這段代碼的實際運行效果是這樣的。

var test;console.log(test);test = 'test';console.log(test);

 

這樣一來就清晰多了吧,相信大家應該都能看明白。

接下來我們看一個複雜點的。

var test = 'test';console.log(test); //1function fn(){  console.log(test);//2  var test = 'function test';  console.log(test);//3}fn();console.log(test); //4

 

上面這段代碼,會依次輸出。

1.test

2.undefined

3.function test

4.test

相信這個大家都明白,原理與上面一樣。

函數內部被解析為 

var test;   //定義test console.log(test); //輸出test,值為undefined,因為當前環境記憶體在test,不在範圍鏈中向上尋找test, 故此輸出undefinedtest = 'function test'; //  給test賦值為 'function test'.console.log(test); //輸出test ,值為function test;

 

我們在看一個例子

console.log(test);var test = 'test';function test(){}console.log(test);

 

函數與變數同名的情況,當然。這種情況實際開發中幾乎不會遇到。

上面這個例子會輸出 function test(){} 然後輸出 'test', 原因是因為funciton會比var先解析。  

而在javascript中,函數是對象,函數名卻是一個變數(變數裡儲存的是函數的引用)。

所以在在遇到第一次輸出test時,輸出的不是undefined 而是將函數輸出。

後面的執行過程大家應該都清楚了。 

我們最後在看一個例子,

function fn(){  test = 'bbb';  var test = 'ccc';  console.log(test);}fn();console.log(test);

 

按照正常思路,似乎會輸出ccc,然後輸出bbb。因為test 前面沒有var 此時它代表全域變數。 

然而很不幸的是,會先輸出'ccc'然後拋出一個錯誤.原因是test不存在。

原因是什麼呢,很簡單。因為fn內部解析過程是這樣的。

var test;test = 'bbb';test = 'ccc';  

故此test = bbb 實際是對函數內部的test 進行操作。 

由此上例子我們可以的到一個結論,在js中調用可以在定義前面的,不止是function;變數也可以,見下例;

function fn(){  test = 'ttt';
  alert(test); 
  return;  
  var test; //此定義會被解析到指派陳述式之前,故此上面的test 是函數內部變數。}

 

此時的test依舊是函數內部變數。

以上便是var的關鍵字的一些特性,如有錯誤或遺漏之處。歡迎指出。

相關文章

聯繫我們

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