91久久久久久久久_欧美日韩中文_在线观看中文字幕亚洲_夜夜骑首页_精品久久伊人_天天色天天射天天操

當(dāng)前位置: 首頁IT技術(shù) → JS變量為什么使用前面要申明

JS變量為什么使用前面要申明

更多

只要是寫過點(diǎn)JS代碼,很簡(jiǎn)單一個(gè)var 就完事了。那對(duì)于JS編譯器背后它又發(fā)生了什么呢?那就一步步通過代碼來講起。

View Code?

x = 1;

alert(x);

var y = function() {

alert(x);

var x = 2;

alert(x);

}

y();

上面的代碼也會(huì)你答對(duì)了它會(huì)分別輸出:1,undefined,2。對(duì)于我來說,第一反應(yīng)它會(huì)輸出:1,1,2。為什么第二個(gè)會(huì)輸出undefined?在上面我明確定義了一個(gè)全局變量x,為何找不到?

那是因?yàn)椋簀s編譯器在執(zhí)行這個(gè)y函數(shù)的時(shí)候,會(huì)把把它body里面的聲明變量提前到最前面進(jìn)行聲明。比如:var x=2; 編譯器先會(huì)在body最前面進(jìn)行var x 聲明。其實(shí)上面的代碼等同于下面的這段代碼:

?

x = 1;

alert(x);

var y = function() {
var x;//此時(shí)x還未賦值,所以為undefined。

alert(x);

x = 2;

alert(x);

}

y();

所以也就不難理解x=undefined的了.但是如果把var x = 2;這段代碼給刪掉,在內(nèi)部它沒有進(jìn)行var聲明。它會(huì)一直沿著作用域向上找,此時(shí)的x 就為全局x.

接下來再看一個(gè)更有趣的例子。

?

var a = 1;

function b() {

a = 10;

?

return;

?

}

b();

alert(a);

///////////////////////////////////

?

var a = 1;

function b() {

a = 10;

?

return;

?

function a() {}

?

} b(); alert(a);

例子很簡(jiǎn)單。第一個(gè)例子為輸出10,第二個(gè)會(huì)輸出1。這是為什么呢?況且第二個(gè)例子我都return 了。按理都應(yīng)當(dāng)輸出10才對(duì)呀!那時(shí)因?yàn)镴S編譯器在背后作怪。

兩段代碼差別就是第二個(gè)例子多了個(gè)function a(){};便這個(gè)函數(shù)體里面什么也沒有,并且也沒有對(duì)它進(jìn)行任何調(diào)用。

其實(shí)JS編譯器在背后會(huì)把function a() {}編譯成 var a=function (){}。此時(shí)對(duì)于函數(shù)內(nèi)部也有一個(gè)a=10; 外面的a些也還是1;根據(jù)JS作用域。會(huì)先找內(nèi)部的a,如果找不到再向上一級(jí)一級(jí)找。

最張alert(a) 就會(huì)顯示1;

熱門評(píng)論
最新評(píng)論
發(fā)表評(píng)論 查看所有評(píng)論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)
主站蜘蛛池模板: 天天操天天碰 | 黄a视频 | 日韩一区在线播放 | 三级av片| 亚洲综合在线视频 | 9.1成人看片免费版 国产草草影院 | 国产毛片一级 | 丰满少妇av| 亚洲视频一区二区三区 | 国产中文字幕在线 | txvlog.com| 国产精品96| 久久精品1| 亚洲二三区 | 日本中文字幕一区 | 国产欧美一区二区精品性色超碰 | 天堂av网站| 波多野结衣之双调教hd | 亚洲三级网站 | 国产精品久久久久久久久久久久久 | 91精品国自产在线观看 | 亚洲国产精品成人无久久精品 | 国产自产21区 | 日韩欧美在线视频 | 日韩一区二区三区在线播放 | 国产精品高潮呻吟av | 色婷婷国产精品综合在线观看 | 日日日干干干 | 亚洲综合激情网 | www.九色 | 日韩天堂在线 | av网站观看 | a在线免费观看 | 电家庭影院午夜 | 伊人久久av| 日韩视频在线观看免费 | 国产黄色大片 | 午夜av片| 色综合99| 日本少妇中文字幕 | 欧美在线一区二区 |