国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ES5和ES6中的變量聲明提升

APICloud / 2101人閱讀

摘要:結(jié)論對(duì)于中所說(shuō)的變量聲明提前,更準(zhǔn)確的說(shuō)法是變量定義聲明提前了,更準(zhǔn)確的理解是定義聲明處于程序運(yùn)行的第一個(gè)階段導(dǎo)致相較于賦值聲明的第二階段有了前提的效果。

ES5和ES6中的變量聲明提升

Example1:

a=2;
var a;
console.log( a );   //結(jié)果為2

Example2:

console.log( a );   //結(jié)果是undefined
var a=2;

Example2:

foo();  //結(jié)果是1
var foo;
foo = function() { 
    console.log( 2 );
};
function foo() { 
    console.log( 1 );
}

原理解讀:瀏覽器引擎在運(yùn)行程序分為兩個(gè)階段:第一個(gè)的階段是編譯階段,該階段負(fù)責(zé)找出代碼中所有的定義聲明(包括變量和函數(shù)),并關(guān)聯(lián)到合適的作用域中;第二階段是執(zhí)行階段,該階段負(fù)責(zé)找出代碼中的所有賦值聲明,并在作用域找找到第一階段的定義聲明,以供使用。
代碼解讀
第一個(gè)例子在編譯階段會(huì)將var a;這句定義聲明首先解讀關(guān)聯(lián)到全局作用域中,所以當(dāng)在賦值聲明階段執(zhí)行a=2;console.log(a);這兩個(gè)賦值聲明的代碼時(shí)是正常執(zhí)行的,也就有了定義聲明提前了的感覺(jué)。

第二個(gè)例子也同樣是第一階段先解讀了var a,這部分定義聲明,接著在第二階段的時(shí)候執(zhí)行console.log(a);的時(shí)候報(bào)undefined,說(shuō)明雖然定義聲明雖然提前了,可是賦值聲明a=2;這部分仍然未提前。

第三個(gè)例子在編譯階段會(huì)將 var foo;變量定義聲明和 function foo(){...}函數(shù)定義聲明提前,然后在第二階段執(zhí)行foo();賦值聲明,這里需要注意的是在這種變量和函數(shù)重復(fù)聲明的情況,函數(shù)定義申明會(huì)被提更前,原因倒不是真的是提前了,而只是在賦值聲明的時(shí)候首先會(huì)去方法域中尋找,而后才去變量域中尋找,所以導(dǎo)致看起來(lái)是函數(shù)申明比變量聲明更提前了。

結(jié)論:對(duì)于JS中所說(shuō)的變量聲明提前,更準(zhǔn)確的說(shuō)法是變量定義聲明提前了,更準(zhǔn)確的理解是定義聲明處于程序運(yùn)行的第一個(gè)階段導(dǎo)致相較于賦值聲明的第二階段有了前提的效果。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/83988.html

相關(guān)文章

  • ES5ES6作用域詳解

    摘要:允許在塊級(jí)作用域內(nèi)聲明函數(shù)。上面代碼中,存在全局變量,但是塊級(jí)作用域內(nèi)又聲明了一個(gè)局部變量,導(dǎo)致后者綁定這個(gè)塊級(jí)作用域,所以在聲明變量前,對(duì)賦值會(huì)報(bào)錯(cuò)。 ES5的作用域 變量起作用的范圍,js中能創(chuàng)建作用域的只能是函數(shù) { let a = 1; var b = 2; } console.log(a); // a is not defined console.log(b); //...

    Dr_Noooo 評(píng)論0 收藏0
  • JavaScript聲明變量詳解

    摘要:命令用于規(guī)定模塊的對(duì)外接口,命令用于輸入其他模塊提供的功能所以在一定程度上來(lái)說(shuō),也具有聲明變量的功能。當(dāng)沒(méi)有聲明,直接給變量賦值時(shí),會(huì)隱式地給變量聲明,此時(shí)這個(gè)變量作為全局變量存在。 前言 如果文章中有出現(xiàn)紕漏、錯(cuò)誤之處,還請(qǐng)看到的小伙伴多多指教,先行謝過(guò) 在ES5階段,JavaScript 使用 var 和 function 來(lái)聲明變量, ES6 中又添加了let、const、imp...

    paulquei 評(píng)論0 收藏0
  • ES6學(xué)習(xí) 第一章 let const 命令

    摘要:外層作用域不報(bào)錯(cuò)正常輸出塊級(jí)作用域與函數(shù)聲明規(guī)定,函數(shù)只能在頂層作用域和函數(shù)作用域之中聲明,不能在塊級(jí)作用域聲明。規(guī)定,塊級(jí)作用域之中,函數(shù)聲明語(yǔ)句的行為類似于,在塊級(jí)作用域之外不可引用。同時(shí),函數(shù)聲明還會(huì)提升到所在的塊級(jí)作用域的頭部。 前言:最近開(kāi)始看阮一峰老師的《ECMAScript 6 入門(mén)》(以下簡(jiǎn)稱原...

    番茄西紅柿 評(píng)論0 收藏2637
  • ES6系列文章 塊級(jí)作用域

    摘要:聲明之函數(shù)作用域和全局作用域。塊級(jí)作用域不能重復(fù)聲明臨時(shí)性死區(qū)等特性用來(lái)解決變量存在的種種問(wèn)題。塊級(jí)作用域終于在外面訪問(wèn)不到了。一些常量聲明使用聲明的變量名全部大寫(xiě)。 ES5之前javascript語(yǔ)言只有函數(shù)作用域和全局作用域,使用var來(lái)聲明變量,var聲明的變量還存在變量提升使人困惑不已。我們先來(lái)復(fù)習(xí)一下ES5的var聲明,再對(duì)比學(xué)習(xí)let和const 。 var var聲明之函...

    趙連江 評(píng)論0 收藏0
  • ES6學(xué)習(xí)之 -- letconst命令

    摘要:命令用來(lái)聲明變量,它的用法類似,但是命令聲明的變量只在所在的代碼塊中有效。不允許重復(fù)聲明不允許在同一作用域聲明兩個(gè)相同的變量。對(duì)于內(nèi)部的數(shù)據(jù)結(jié)構(gòu)的變化是無(wú)法控制的。 let命令 用來(lái)聲明變量,它的用法類似var,但是let命令聲明的變量只在所在的代碼塊中有效。 { var a = 1; let b = 2; } console.log(a); // 1 con...

    marser 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<