麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 18:45:39
字體:
來源:轉載
供稿:網友

一、變量聲明提升

      hoisting 英[‘hɔɪstɪŋ] 美[‘hɔɪstɪŋ]

      n. 起重,提升

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

先來看一個栗子

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

這里將會輸出 undefined'world' 'hello'

此處主要有兩個知識點:

      1、作用域

      2、變量聲明提升

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

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

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

當執行到第一個log時,變量cc只是進行了聲明,并未賦值,所以打印出的是undefined

二、 函數聲明提升

函數的聲明有兩種方式:函數聲明和函數表達式

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

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久精品av| 色97在线| 一区二区久久久久草草 | 国产精品av久久久久久网址 | 精品国产91久久久久久久 | 婷婷久久综合九色综合色多多蜜臀 | 爽爽淫人综合网网站 | 99综合视频 | 毛片在哪看 | 色播视频在线播放 | 中文字幕涩涩久久乱小说 | 亚欧在线免费观看 | 免费观看欧美一级片 | h色视频网站 | 韩国三级日本三级香港三级黄 | 亚洲五码在线观看视频 | 欧美成人se01短视频在线看 | 鲁丝一区二区二区四区 | 亚洲人成中文字幕在线观看 | 羞羞的动漫在线观看 | 欧美成人午夜一区二区三区 | 欧美一级不卡视频 | 久草手机在线观看视频 | 91免费视频版 | 色柚视频网站ww色 | 男女亲热网站 | 成人免费网站在线观看视频 | 亚洲国产超高清a毛毛片 | 播色网 | 一级黄色毛片免费 | 久久久久久久网站 | 亚洲人成网在线观看 | 一区二区三区欧美在线 | 欧美精品久久久久久久久久 | 久久一区三区 | 嗯~啊~用力~高h | 国产美女视频一区二区三区 | 欧美a欧美 | 国产精品欧美久久久久一区二区 | 国产精品欧美日韩一区二区 | 亚洲日本欧美 |