欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年11月30日 10:04:04   投稿:daisy  
大家應(yīng)該都只奧javascript的變量聲明具有hoisting機(jī)制,JavaScript引擎在執(zhí)行的時(shí)候,會(huì)把所有變量的聲明都提升到當(dāng)前作用域的最前面。網(wǎng)上關(guān)于JavaScript的變量聲明提升問題的文章有很多,這篇文章將再次談?wù)勱P(guān)于這方面的問題,有需要的朋友們可以參考借鑒。

一、變量聲明提升

      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)文章

  • Js參數(shù)值中含有單引號(hào)或雙引號(hào)問題的解決方法

    Js參數(shù)值中含有單引號(hào)或雙引號(hào)問題的解決方法

    本文是對(duì)Js參數(shù)值中含有單引號(hào)或雙引號(hào)問題的解決方法進(jìn)行了總結(jié)介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-11-11
  • Bootstrap table學(xué)習(xí)筆記(2) 前后端分頁模糊查詢

    Bootstrap table學(xué)習(xí)筆記(2) 前后端分頁模糊查詢

    這篇文章主要為大家分享了Bootstrap table學(xué)習(xí)筆記,前后端分頁模糊查詢,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • js漢字轉(zhuǎn)拼音實(shí)現(xiàn)代碼

    js漢字轉(zhuǎn)拼音實(shí)現(xiàn)代碼

    漢字轉(zhuǎn)拼音,比較娛樂的一款應(yīng)用,感興趣的朋友可以了解下,或許對(duì)你學(xué)習(xí)js有所幫助
    2013-02-02
  • JavaScript單一職責(zé)原則深入分析

    JavaScript單一職責(zé)原則深入分析

    這篇文章主要介紹了理解JavaScript單一職責(zé)原則,單一職責(zé)原則(SRP:Single?responsibility?principle)又稱單一功能原則,面向?qū)ο笪鍌€(gè)基本原則(SOLID)之一,下文更多相關(guān)介紹感興趣的小伙伴可以參考一下
    2022-08-08
  • js數(shù)組刪除問題(splice和delete的用法)

    js數(shù)組刪除問題(splice和delete的用法)

    這篇文章主要介紹了js數(shù)組刪除問題(splice和delete的用法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • mui開發(fā)中獲取單選按鈕、復(fù)選框的值(實(shí)例講解)

    mui開發(fā)中獲取單選按鈕、復(fù)選框的值(實(shí)例講解)

    下面小編就為大家?guī)硪黄猰ui開發(fā)中獲取單選按鈕、復(fù)選框的值(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • 微信小程序12行js代碼自己寫個(gè)滑塊功能(推薦)

    微信小程序12行js代碼自己寫個(gè)滑塊功能(推薦)

    這篇文章主要介紹了微信小程序12行js代碼自己寫個(gè)滑塊功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • JavaScript深入理解作用域鏈與閉包詳情

    JavaScript深入理解作用域鏈與閉包詳情

    這篇文章主要介紹了JavaScript深入理解作用域鏈與閉包詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • JS的事件循環(huán)執(zhí)行機(jī)制詳解

    JS的事件循環(huán)執(zhí)行機(jī)制詳解

    JS執(zhí)行是單線程的,它是基于事件循環(huán)的,那么本篇博文就來分享一下關(guān)于JS的事件循環(huán)執(zhí)行機(jī)制,感興趣的小伙伴可以跟著小編一起來學(xué)習(xí)
    2023-05-05
  • require.js的用法詳解

    require.js的用法詳解

    本文給大家介紹require.js的用法,require.js的誕生是為了解決兩大問題,第一實(shí)現(xiàn)js文件的異步加載,避免網(wǎng)頁失去響應(yīng),第二管理模塊之間的依賴性,便于代碼的編寫和維護(hù),對(duì)require.js用法感興趣的朋友可以參考下本篇文章
    2015-10-10

最新評(píng)論