成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

honhon / 525人閱讀

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

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

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

先聲明,后賦值,聲明和賦值是分開(kāi)的。

讓我們看幾個(gè)例子并解釋下

先看這個(gè)例子:

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

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

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

然后程序中聲明了又一次test ,但其實(shí)test已被聲明過(guò)了,所以實(shí)際上第二句只是賦值,將0賦值給test。第三句不起效果,因?yàn)槁暶鬟^(guò)了嘛,所以不是undefined。

再看個(gè)例子:

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, 這個(gè)地方聲明過(guò)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)

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

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

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

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)注釋上了,很容易,對(duì)吧?

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

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

相關(guān)文章

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

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

    tinysun1234 評(píng)論0 收藏0
  • 【譯】理解JavaScript:作用域

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

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

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

    LeexMuller 評(píng)論0 收藏0
  • js 變量提升閉包理解

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

    luoyibu 評(píng)論0 收藏0
  • 代碼真的被提升了嗎?

    摘要:為啥因?yàn)樽兞刻嵘兞康穆暶鞅惶嵘疆?dāng)前作用域的頂部了。也就是可以想象成這樣此外,還有函數(shù)提升,和變量提升類似和被提升了,所以不會(huì)報(bào)錯(cuò)。開(kāi)始處理函數(shù)聲明,再次提醒,函數(shù)表達(dá)式不會(huì)被處理。 變量提升 & 函數(shù)提升 function f() { console.log(a); // ? var a = 1; } f(); 簡(jiǎn)單簡(jiǎn)單,打印結(jié)果是 undefined。為啥?因?yàn)?..

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

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

0條評(píng)論

閱讀需要支付1元查看
<