国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript中局部變量和全局變量的區(qū)別詳解

2019-11-20 13:05:47
字體:
供稿:網(wǎng)友

javascript有兩種變量:局部變量和全局變量。當(dāng)然,我們這篇文章是幫助大家真正的區(qū)別這兩種變量。

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

復(fù)制代碼 代碼如下:

function myName() {
 i = 'yuanjianhang';
}
myName();
function sayName() {
 alert(i);
}
sayName();

輸出結(jié)果為:yuanjianhang

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

復(fù)制代碼 代碼如下:

function myName() {
 var i='yuanjianhang';
}
myName();
function sayName() {
 alert(i);
}
sayName();

此時,游覽器將沒有任何輸出結(jié)果,因為i 是在函數(shù)myName中定義的,所以它只是myName的局部變量,不可能被外部調(diào)用。
 
現(xiàn)在再回過頭來看下面的代碼:

復(fù)制代碼 代碼如下:

function myName() {
 i = 'yuanjianhang';
}
myName();
function sayName() {
 alert(i);
}
sayName();

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

復(fù)制代碼 代碼如下:

function myName() {
 i = 'yuanjianhang';
}
function sayName() {
 alert(i);
}
sayName();

 此時,游覽器也不會有如何反應(yīng)。因為雖然i是全局變量,但是函數(shù)myName()并沒有被調(diào)用,所以就相當(dāng)于雖然聲明了i,但是并沒有給i賦予任何的值,所以沒有任何輸出。
同理,如果把上例改成:
 

復(fù)制代碼 代碼如下:

function myName() {
 
 i = 'yuanjianhang';
}
function sayName() {
 alert(i);
}
sayName();
myName();

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

復(fù)制代碼 代碼如下:

var i = 'yuanjianhang';
function myloveName() {
 i = 'guanxi';
}
myloveName();
function myName() {
 alert(i);
}
myName();

這次的結(jié)果是什么呢?
答案是guanxi
首先,i的原始值是yuanjianhang,但是當(dāng)調(diào)用myloveName()函數(shù)之后,將i的值改為guanxi,所以最后的輸出結(jié)果是guanxi。

如果將代碼改為:

復(fù)制代碼 代碼如下:

var i = 'yuanjianhang';
function myloveName() {
 var i = 'guanxi';
}
myloveName();
function myName() {
 alert(i);
}
myName();

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

如果將代碼改造成這樣:

復(fù)制代碼 代碼如下:

var i = 'yuanjianhang';
function myloveName() {
 i = 'guanxi';
}
function myName() {
 alert(i);
}
myName();
myloveName();

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

既然函數(shù)內(nèi)部可以調(diào)用全局變量,那么下面這種情況呢:

復(fù)制代碼 代碼如下:

var i = 'yuanjianhang';
function myloveName() {
  i = 'guanxi';
 alert(i);
}
myloveName();

此時變量的值是哪個呢?

我們來分析下:

首先全局變量i被賦值為:yuanjianhang。

接下來myloveName()函數(shù)被調(diào)用,全局變量i被重新賦予新的值:guanxi

所以結(jié)果肯定是:guanxi。

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

復(fù)制代碼 代碼如下:

var i = 'yuanjianhang';
function myloveName() {
  alert(i);
 i = 'guanxi';
}
myloveName();

這時候結(jié)果是什么呢?
經(jīng)過驗證結(jié)果是:undefined
如果代碼是這樣呢:

復(fù)制代碼 代碼如下:

var i = 'yuanjianhang';
function myloveName() {
  alert(i);
}
myloveName();

此時i的結(jié)果是:yuanjianhang

為什么會發(fā)生上面undefined情況,因為代碼的執(zhí)行順序是從上到下的,在輸出i之前并沒有對i定義。所以從這里可以看出,使用代碼的時候,變量的聲明一定要放到代碼的前面,以避免出現(xiàn)類似的問題!

同理:

復(fù)制代碼 代碼如下:

var i = 'yuanjianhang';
function myloveName() {
 alert(i);
 var i = 'guanxi';
 
}
myloveName();

這種情況下也會輸出:undefined

好了,關(guān)于變量我只有這么多的介紹了,相信這些任何人都可以看明白。不管代碼如何復(fù)制,其核心是不會變的。

以上就是本文的全部內(nèi)容了,小伙伴們對于javascript中局部變量和全局變量的區(qū)別是否有了更深刻的認(rèn)識了呢,祝大家新年快樂~學(xué)習(xí)愉快。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 壤塘县| 高邮市| 明星| 萨嘎县| 印江| 巴楚县| 黎川县| 金溪县| 琼中| 定陶县| 青铜峡市| 镇康县| 宁强县| 南投县| 台中市| 峨眉山市| 班戈县| 祁东县| 四会市| 兴山县| 南城县| 教育| 汉源县| 黄骅市| 嘉鱼县| 宁武县| 罗定市| 定边县| 酉阳| 皋兰县| 嘉禾县| 华蓥市| 田阳县| 阜宁县| 易门县| 阳信县| 从江县| 霍林郭勒市| 贵南县| 新民市| 宝清县|