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

資訊專(zhuān)欄INFORMATION COLUMN

javascript變量提升和函數(shù)提升

sf190404 / 3298人閱讀

摘要:注意的是,在語(yǔ)法中新增的聲明方式,并不支持這種變量提升強(qiáng)行使用會(huì)拋出錯(cuò)誤函數(shù)提升對(duì)于函數(shù)提升,只用函數(shù)的聲明被提升,表達(dá)式則不會(huì)被提升函數(shù)聲明函數(shù)表達(dá)式表達(dá)式定義的函數(shù),稱(chēng)為匿名函數(shù)。匿名函數(shù)沒(méi)有函數(shù)提升。


變量提升

Variable hoisting變量提升是js比較有特點(diǎn)的地方,它允許你先使用變量,在其后面再進(jìn)行變量聲明,不會(huì)拋出 Uncaught ReferenceError異常。雖然變量被提升到前面,但是它的默認(rèn)值則是undefind,在引用的時(shí)候也使用這個(gè)值,知道在其面后進(jìn)行賦值,在使用時(shí)候即為所贖的值。

舉個(gè)例子:

console.log(x)
//如果后面不定義x 則拋出"ReferenceError: x is not defined
//如果后面對(duì)x定義 則打印出undefined
var x = 2


var abc = "abcd";

(function(){
    console.log(abc); //undefined
   var abc = "1234";
  console.log(abc); //"1234"
})()

//上面代碼可以這樣翻譯

var x;
console.log(x)//undefined
var x = 2

var abc = "abcd";

(function(){
  var abc;
  console.log(abc); //undefined
  var abc = "1234";
  console.log(abc); //"1234"
})()

基于這個(gè)原因,在平時(shí)編寫(xiě)代碼時(shí)候,盡量把變量聲明放到代碼塊最頂層位置,可以使代碼結(jié)構(gòu)清晰。
注意的是,在ES6語(yǔ)法中新增的let or const 聲明方式,并不支持這種變量提升,強(qiáng)行使用會(huì)拋出錯(cuò)誤ReferenceError

函數(shù)提升

對(duì)于函數(shù)提升,只用函數(shù)的聲明被提升,表達(dá)式則不會(huì)被提升

/* 函數(shù)聲明 */

foo(); // "bar"

function foo() {
  console.log("bar");
}
/* 函數(shù)表達(dá)式   表達(dá)式定義的函數(shù),稱(chēng)為匿名函數(shù)。匿名函數(shù)沒(méi)有函數(shù)提升。*/

baz(); // TypeError: baz is not a function
//此時(shí)的"baz"相當(dāng)于一個(gè)聲明的變量,類(lèi)型為undefined。
由于baz只是相當(dāng)于一個(gè)變量,因此瀏覽器認(rèn)為"baz()"不是一個(gè)函數(shù)。
var baz = function() {
  console.log("bar2");
};

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

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

相關(guān)文章

  • javascript聲明提升

    摘要:但是碰到聲明提升,這種想法就會(huì)被打破。聲明一個(gè)函數(shù)進(jìn)行相應(yīng)的操作,會(huì)得到函數(shù)聲明提升的結(jié)果。由此可以發(fā)現(xiàn)變量和函數(shù)的聲明都會(huì)被提升在其他代碼的前面執(zhí)行。一個(gè)普通塊內(nèi)部的函數(shù)聲明通常會(huì)被提升到所在的作用域的頂部。的創(chuàng)建初始化和賦值均會(huì)被提升。 Javascript聲明提升 在分析聲明提升之前,我認(rèn)為有必要知道的兩點(diǎn): 一、引擎查詢(xún)變量的兩種方式 引擎查詢(xún)變量的方式可以分為L(zhǎng)HS和RHS兩...

    evin2016 評(píng)論0 收藏0
  • 【6】JavaScript 函數(shù)高級(jí)——執(zhí)行上下文與執(zhí)行上下文棧、變量提升(圖解+典型實(shí)例分析)

    摘要:函數(shù)和變量相比,會(huì)被優(yōu)先提升。這意味著函數(shù)會(huì)被提升到更靠前的位置。僅提升聲明,而不提升初始化。 JavaScript 函數(shù)高級(jí)——執(zhí)行上下文與執(zhí)行上下文棧(圖解+典型實(shí)例分析) 變量提升與函數(shù)提升 變量聲明提升 通過(guò) var 定義(聲明)的變量,在定義語(yǔ)句之前就可以訪(fǎng)問(wèn)到 值:undefined /* 面試題 : 輸出 undefined */ var a = 3 ...

    niuxiaowei111 評(píng)論0 收藏0
  • 譯: 函數(shù)提升提升面試的相關(guān)問(wèn)題

    摘要:函數(shù)提升在里有兩種方式創(chuàng)建函數(shù),通過(guò)函數(shù)聲明和函數(shù)表達(dá)式。函數(shù)聲明用指定的參數(shù)來(lái)定義函數(shù)。提示不要在中進(jìn)行函數(shù)聲明。問(wèn)題輸出兩個(gè)都是用函數(shù)聲明的函數(shù),將被提升到的局部作用域頂端。函數(shù)本身將作為函數(shù)聲明在全局范圍內(nèi)提升。 作者關(guān)于提升的話(huà)題,總共有兩篇。(后來(lái)又有一個(gè)討論篇),再次搬過(guò)來(lái)。水平有限,如果翻譯的不準(zhǔn)確請(qǐng)包涵,并去看原文。下面開(kāi)始: 這是我之前的關(guān)于提升的文章,標(biāo)題為《用le...

    wuaiqiu 評(píng)論0 收藏0
  • JavaScript 變量聲明提升

    摘要:輸出的結(jié)果為輸出的結(jié)果為提升后輸出的結(jié)果為重新定義了變量輸出的結(jié)果為如果定義了相同的函數(shù)變量聲明,后定義的聲明會(huì)覆蓋掉先前的聲明,看如下代碼輸出練習(xí)的值是多少的值是多少第二題的解析請(qǐng)看這里參考資料文章文章中文版鏈接文章推薦文章變量提升 JavaScript 變量聲明提升 原文鏈接 一個(gè)小例子 先來(lái)看個(gè)例子: console.log(a); // undefined var a =...

    fireflow 評(píng)論0 收藏0
  • ES6 變量作用域與提升變量的生命周期詳解

    摘要:不同的是函數(shù)體并不會(huì)再被提升至函數(shù)作用域頭部,而僅會(huì)被提升到塊級(jí)作用域頭部避免全局變量在計(jì)算機(jī)編程中,全局變量指的是在所有作用域中都能訪(fǎng)問(wèn)的變量。 ES6 變量作用域與提升:變量的生命周期詳解從屬于筆者的現(xiàn)代 JavaScript 開(kāi)發(fā):語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。本文詳細(xì)討論了 JavaScript 中作用域、執(zhí)行上下文、不同作用域下變量提升與函數(shù)提升的表現(xiàn)、頂層對(duì)象以及如何避免創(chuàng)建...

    lmxdawn 評(píng)論0 收藏0
  • 淺析JavaScript中的提升

    摘要:代碼在執(zhí)行時(shí)并不完全是由上到下一行一行執(zhí)行的,由此產(chǎn)生了一個(gè)提升的問(wèn)題。第二個(gè)賦值聲明會(huì)被留在原地等待執(zhí)行階段??梢缘弥瘮?shù)聲明提升的優(yōu)先權(quán)大于普通變量聲明。 JavaScript代碼在執(zhí)行時(shí)并不完全是由上到下一行一行執(zhí)行的,由此產(chǎn)生了一個(gè)提升的問(wèn)題。 什么是提升 可以簡(jiǎn)單理解為:聲明(變量和函數(shù))都會(huì)被移動(dòng)到各自作用域的最頂端,這個(gè)過(guò)程被稱(chēng)為提升。 具體例子看提升 下面兩個(gè)例子a會(huì)l...

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

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

0條評(píng)論

sf190404

|高級(jí)講師

TA的文章

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