javascript中局部變數和全域變數的區別詳解,javascript全域變數

來源:互聯網
上載者:User

javascript中局部變數和全域變數的區別詳解,javascript全域變數

javascript有兩種變數:局部變數和全域變數。當然,我們這篇文章是協助大家真正的區別這兩種變數。

首先,局部變數是指只能在本變數聲明的函數內部調用。全域變數時整個代碼中都可以調用的變數。當然,單單從字面上理解肯定是不清楚的,下面我詳細的介紹下:
大家都知道,變數是需要用var關鍵字聲明的。但是javascript中也可以隱式的使用變數,就是不用聲明,直接使用。而且,千萬注意,javascript把隱式聲明的變數總是當成全域變數來使用的。
例如:

複製代碼 代碼如下:
function myName() {
 i = 'yuanjianhang';
}
myName();
function sayName() {
 alert(i);
}
sayName();

輸出結果為:yuanjianhang

這說明變數i就是一個全域的變數,如果把上面的代碼改成如下:

複製代碼 代碼如下:
function myName() {
 var i='yuanjianhang';
}
myName();
function sayName() {
 alert(i);
}
sayName();

此時,遊覽器將沒有任何輸出結果,因為i 是在函數myName中定義的,所以它只是myName的局部變數,不可能被外部調用。
 
現在再回過頭來看下面的代碼:

複製代碼 代碼如下:
function myName() {
 i = 'yuanjianhang';
}
myName();
function sayName() {
 alert(i);
}
sayName();

現在,我們進行一下改動,把myName();去掉,代碼如下:

複製代碼 代碼如下:
function myName() {
 i = 'yuanjianhang';
}
function sayName() {
 alert(i);
}
sayName();

 此時,遊覽器也不會有如何反應。因為雖然i是全域變數,但是函數myName()並沒有被調用,所以就相當於雖然聲明了i,但是並沒有給i賦予任何的值,所以沒有任何輸出。
同理,如果把上例改成:
 
複製代碼 代碼如下:
function myName() {
 
 i = 'yuanjianhang';
}
function sayName() {
 alert(i);
}
sayName();
myName();

這種情況下還是不會輸出任何結果,javascript代碼的執行時從上到下的,在sayName()函數被調用時會檢查變數i的值,此時函數myName尚未執行,也就是說i還沒有被賦值,所以不會輸出任何結果。
 
為了方便大家更好的理解,這裡再舉一個例子:

複製代碼 代碼如下:
var i = 'yuanjianhang';
function myloveName() {
 i = 'guanxi';
}
myloveName();
function myName() {
 alert(i);
}
myName();

這次的結果是什麼呢?
答案是guanxi
首先,i的原始值是yuanjianhang,但是當調用myloveName()函數之後,將i的值改為guanxi,所以最後的輸出結果是guanxi。

如果將代碼改為:

複製代碼 代碼如下:
var i = 'yuanjianhang';
function myloveName() {
 var i = 'guanxi';
}
myloveName();
function myName() {
 alert(i);
}
myName();

此時的結果就是yuanjianhang了,因為代碼中的兩個i不一樣,一個是全域的,一個是局部的,也可以這樣理解,雖然兩個i的名字一樣,但是這兩個i的本質卻不一樣,好像有兩個名字一樣的人一樣,雖然名字一樣,但卻不是同一個人。

如果將代碼改造成這樣:

複製代碼 代碼如下:
var i = 'yuanjianhang';
function myloveName() {
 i = 'guanxi';
}
function myName() {
 alert(i);
}
myName();
myloveName();

相信大家可以自己算出結果了,結果是yuanjianhang。

既然函數內部可以調用全域變數,那麼下面這種情況呢:

複製代碼 代碼如下:
var i = 'yuanjianhang';
function myloveName() {
  i = 'guanxi';
 alert(i);
}
myloveName();

此時變數的值是哪個呢?

我們來分析下:

首先全域變數i被賦值為:yuanjianhang。

接下來myloveName()函數被調用,全域變數i被重新賦予新的值:guanxi

所以結果肯定是:guanxi。

如果我們把alert提前呢,像這樣:

複製代碼 代碼如下:
var i = 'yuanjianhang';
function myloveName() {
  alert(i);
 i = 'guanxi';
}
myloveName();

這時候結果是什麼呢?
經過驗證結果是:undefined
如果代碼是這樣呢:

複製代碼 代碼如下:
var i = 'yuanjianhang';
function myloveName() {
  alert(i);
}
myloveName();

此時i的結果是:yuanjianhang

為什麼會發生上面undefined情況,因為代碼的執行順序是從上到下的,在輸出i之前並沒有對i定義。所以從這裡可以看出,使用代碼的時候,變數的聲明一定要放到代碼的前面,以避免出現類似的問題!

同理:

複製代碼 代碼如下:
var i = 'yuanjianhang';
function myloveName() {
 alert(i);
 var i = 'guanxi';
 
}
myloveName();

這種情況下也會輸出:undefined

好了,關於變數我只有這麼多的介紹了,相信這些任何人都可以看明白。不管代碼如何複製,其核心是不會變的。

以上就是本文的全部內容了,小夥伴們對於javascript中局部變數和全域變數的區別是否有了更深刻的認識了呢,祝大家新年快樂~學習愉快。

聯繫我們

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