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

首頁 > 開發(fā) > JS > 正文

JavaScript的變量聲明提升問題淺析(Hoisting)

2024-05-06 16:33:15
字體:
供稿:網(wǎng)友

一、變量聲明提升

      hoisting 英[‘h??st??] 美[‘h??st??]

      n. 起重,提升

      v. 把…吊起,升起( hoist的現(xiàn)在分詞 )

先來看一個(gè)栗子

var cc = 'hello';function foo(){ console.log(cc); var cc = 'world'; console.log(cc);}foo();console.log(cc);

這里將會(huì)輸出 undefined'world' 'hello'

此處主要有兩個(gè)知識(shí)點(diǎn):

      1、作用域

      2、變量聲明提升

JavaScript是一門解釋性語言,當(dāng)代碼在解釋器(如Chrome的V8引擎)環(huán)境中執(zhí)行時(shí),會(huì)有一個(gè)預(yù)解析的過程,此時(shí)會(huì)將變量聲明和函數(shù)聲明提升至當(dāng)前作用域的最前方,這個(gè)行為被稱為聲明提升(Hoisting)

再來看上面的例子,此代碼有兩層作用域,全局作用域和函數(shù)foo作用域,而foo中的變量聲明在預(yù)解析的過程中會(huì)被提升至函數(shù)作用域的前方,于是代碼就會(huì)變成這樣:

var cc = 'hello';function foo(){ var cc; console.log(cc); cc = 'world'; console.log(cc);}foo();console.log(cc);

當(dāng)執(zhí)行到第一個(gè)log時(shí),變量cc只是進(jìn)行了聲明,并未賦值,所以打印出的是undefined

二、 函數(shù)聲明提升

函數(shù)的聲明有兩種方式:函數(shù)聲明和函數(shù)表達(dá)式

// 函數(shù)聲明function foo(a, b) { return a + b;}// 函數(shù)表達(dá)式var foo = function(a, b) { return a + b;}

解析器在向執(zhí)行環(huán)境中加載數(shù)據(jù)時(shí),對(duì)函數(shù)聲明和函數(shù)表達(dá)式并非一視同仁。解析器會(huì)率先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可用(可以訪問);至于函數(shù)表達(dá)式,則必須等到解析器執(zhí)行到它所在的代碼行,才會(huì)真正被解釋執(zhí)行。

當(dāng)然,也可以函數(shù)聲明和函數(shù)表達(dá)式同時(shí)使用,如var a = function b(){} ,其結(jié)果是只具有函數(shù)表達(dá)式的作用,b會(huì)被自動(dòng)忽略,所以只會(huì)發(fā)生變量提升效果。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 寿光市| 资源县| 日喀则市| 百色市| 五大连池市| 溆浦县| 鄂托克旗| 镇坪县| 卫辉市| 昌邑市| 卢氏县| 扎鲁特旗| 黄梅县| 延长县| 固始县| 望江县| 逊克县| 颍上县| 积石山| 兴宁市| 武功县| 长阳| 全椒县| 浦县| 德州市| 鄂伦春自治旗| 资阳市| 扶沟县| 安阳市| 蓝田县| 通许县| 哈密市| 乐至县| 中超| 柳河县| 嵊泗县| 略阳县| 龙游县| 南靖县| 临猗县| 孟州市|