成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS 變量聲明之變量提升和函數(shù)提升

honhon / 488人閱讀

摘要:很多初學(xué)者弄不清變量提升和函數(shù)提升,整理寫幾個例子,分析一下,你很快搞明白怎么分析。精華放在最上面,兩個最基本的原則函數(shù)聲明優(yōu)先先聲明,后賦值,聲明和賦值是分開的。

很多初學(xué)者弄不清變量提升和函數(shù)提升,整理寫幾個例子,分析一下,你很快搞明白怎么分析。
精華放在最上面,兩個最基本的原則:

函數(shù)聲明優(yōu)先

先聲明,后賦值,聲明和賦值是分開的。

讓我們看幾個例子并解釋下

先看這個例子:

var test=0
var test
function test(){
    console.log(1)
}
console.log(test)

結(jié)果輸出 0
分析一下: 顯然程序中變量test有3次聲明,誰先呢? 記住一個原則,函數(shù)聲明優(yōu)先,所以優(yōu)先的是 function test(), 那么執(zhí)行順序按邏輯上可以換成

function test(){
    console.log(1)
}
var test=0
var test

然后程序中聲明了又一次test ,但其實test已被聲明過了,所以實際上第二句只是賦值,將0賦值給test。第三句不起效果,因為聲明過了嘛,所以不是undefined。

再看個例子:

test = 1
function show(){
    console.log(test)
    var test
    var test = 0
    console.log(test)
}
console.log(test)
var test = 3
show()
console.log(test)

按第二原則,我們發(fā)現(xiàn)程序中有一句 var test= 3, 這個地方聲明過test,我們整體下程序邏輯,變成

var test
test = 1
function show(){
    console.log(test)
    var test
    var test = 0
    console.log(test)
}
console.log(test)
test = 3
show()
console.log(test)

你可能會說搞不清show() 里發(fā)生了什么,解釋一下,同樣套那兩條原則中的第二條,先聲明,后賦值,show()整理為

function show(){
    var test
    console.log(test)
    test = 0
    console.log(test)
}

啊哈,so明顯,show()中的第一次輸出應(yīng)該是undefined,第二次輸出是0
我們把整個程序整理下:

var test
test = 1
function show(){
    var test
    console.log(test) //undefined
    test = 0
    console.log(test) //0
}
console.log(test) //1
test = 3
show()
console.log(test) //3

輸出我已經(jīng)注釋上了,很容易,對吧?

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92954.html

相關(guān)文章

  • 5分鐘深入了解js變量提升

    摘要:對于大多數(shù)開發(fā)者來說,變量提升可以說是一個非常常見的問題,但是可能很多人對其不是特別的了解。如果說擁有和一樣的變量提升效果的話,那么應(yīng)該是輸出。而和它們的變量提升的效果是一樣的,也都存在著臨死性死區(qū)的概念。 對于大多數(shù)js開發(fā)者來說,變量提升可以說是一個非常常見的問題,但是可能很多人對其不是特別的了解。所以在此,我想來講一講。 先從一個簡單的例子來入門: a = 2; var a; ...

    tinysun1234 評論0 收藏0
  • 【譯】理解JavaScript:作用域

    摘要:作用域是代碼的不同部分在運(yùn)行期間的可見性。大多數(shù)開發(fā)者想當(dāng)然地理解作用域,但毫無疑問,有它自己的說明。變量可能是全局作用域的,或者是方法作用域的。總而言之,不要重復(fù)聲明變量,使用良好命名,盡力避免在聲明前調(diào)用和執(zhí)行任何東西。 原文鏈接:https://hackernoon.com/unders... 什么是作用域? 就像JavaScript中的其他東西一樣,作用域并無特別之處。盡管大多...

    betacat 評論0 收藏0
  • 進(jìn)擊JavaScript(一)變量聲明提升

    摘要:如下代碼輸出的結(jié)果是代碼執(zhí)行分為兩個大步預(yù)解析的過程代碼的執(zhí)行過程預(yù)解析與變量聲明提升程序在執(zhí)行過程中,會先將代碼讀取到內(nèi)存中檢查,會將所有的聲明在此進(jìn)行標(biāo)記,所謂的標(biāo)記就是讓解析器知道有這個名字,后面在使用名字的時候不會出現(xiàn)未定義的錯誤。 showImg(https://segmentfault.com/img/remote/1460000012922850); 如下代碼輸出的結(jié)果是...

    LeexMuller 評論0 收藏0
  • js 變量提升閉包理解

    摘要:變量的作用域無非就是兩種全局變量和局部變量。其中內(nèi)部函數(shù)中可以訪問外部函數(shù)的變量,是因為內(nèi)部函數(shù)的作用域鏈中包含了外部函數(shù)的作用域也可以理解為內(nèi)部函數(shù)的作用范圍輻射到了外部函數(shù)的作用范圍另一方面,在函數(shù)外部自然無法讀取函數(shù)內(nèi)的局部變量。 以前學(xué)習(xí)的時候,了解過變量提升和閉包,但是沒有深入了解,網(wǎng)上查了資料,這里記錄下,只供參考。部分內(nèi)容引用: https://www.cnblogs.c...

    luoyibu 評論0 收藏0
  • 代碼真的被提升了嗎?

    摘要:為啥因為變量提升,變量的聲明被提升到當(dāng)前作用域的頂部了。也就是可以想象成這樣此外,還有函數(shù)提升,和變量提升類似和被提升了,所以不會報錯。開始處理函數(shù)聲明,再次提醒,函數(shù)表達(dá)式不會被處理。 變量提升 & 函數(shù)提升 function f() { console.log(a); // ? var a = 1; } f(); 簡單簡單,打印結(jié)果是 undefined。為啥?因為...

    weknow619 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<