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

資訊專欄INFORMATION COLUMN

作用域與提升

idisfkj / 474人閱讀

摘要:在當(dāng)中,只存在函數(shù)作用域和全局作用域,而塊級(jí)作用域是不存在的。作用域中作用域分為兩種,分別是全局作用域函數(shù)作用域其中全局作用域指的是在一個(gè)文件中的作用域。

JavaScript中和C語言、Java這些語言不一樣。在JavaScript當(dāng)中,只存在函數(shù)作用域全局作用域,而塊級(jí)作用域是不存在的。剛剛接觸JavaScript的話往往不知道這一點(diǎn),所以很容易因?yàn)檫@一點(diǎn)在程序中出錯(cuò)。
作用域

JavaScript中作用域分為兩種,分別是:

全局作用域

函數(shù)作用域

其中全局作用域指的是在一個(gè).js文件中的作用域。全局作用域往往包含了這些特點(diǎn):

變量公有化

函數(shù)公有化

簡(jiǎn)而言之就是說全局作用域中的變量和函數(shù)在這個(gè).js都是公有的、可訪問的。而函數(shù)作用域則比起它則范圍相對(duì)狹小一些,特點(diǎn)為:

變量私有化

函數(shù)私有化

函數(shù)作用域當(dāng)中的變量和函數(shù)都是私有的,任何對(duì)變量和函數(shù)的修改都只能在這個(gè)函數(shù)作用域內(nèi)進(jìn)行

提升 變量提升

由于我們上面所說的,JavaScript中沒有塊級(jí)作用域的存在,所以我們的每一個(gè)變量都是全局有效,或者是函數(shù)內(nèi)有效。什么意思?我們先來看一下這段代碼:

function gg(){
    if(tag !== "undefined"){
        var tag = "output!"
        console.log(tag)
    }
}
//輸出: output!

上面這段代碼看似不可能輸出output!,但是其實(shí)這里發(fā)生了變量提升。由于塊級(jí)作用域不存在,所以代碼var tag = "output!"在運(yùn)行時(shí)發(fā)生了如下的情況:

function gg(){
    var tag
    if(tag !== "undefined"){
        tag = "output!"
        console.log(tag)
    }
}
//輸出: output!

即變量tag的定義會(huì)被提升到作用域頂部,所以tag的初值為undefined

函數(shù)提升

和變量一樣,函數(shù)也存在著提升的情況,有兩種聲明函數(shù)的方式:

函數(shù)聲明:

function gg(){
    console.log("success")
}

函數(shù)表達(dá)式:

var gg = function(){
    console.log("success")
}

其中只有函數(shù)聲明能夠被提升到作用域頂部,而函數(shù)表達(dá)式這種形式聲明的函數(shù)則不能被提升

console.log(f1) //輸出 function f1(){}
console.log(f2) //輸出 undefined
function f1(){}
var f2 = function(){}
總結(jié)

JavaScript中只有兩種作用域:全局作用域函數(shù)作用域。而因?yàn)檫@個(gè)原因,在代碼中的的函數(shù)聲明、變量聲明都會(huì)被提升到作用域頂部

掃描下方的二維碼或搜索「tony老師的前端補(bǔ)習(xí)班」關(guān)注我的微信公眾號(hào),那么就可以第一時(shí)間收到我的最新文章。

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

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

相關(guān)文章

  • Js基礎(chǔ)知識(shí)(三) - 作用域與閉包

    摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內(nèi)部,也就是說為其聲明的變量隱式的劫持了所在的塊級(jí)作用域。 作用域與閉包 如何用js創(chuàng)建10個(gè)button標(biāo)簽,點(diǎn)擊每個(gè)按鈕時(shí)打印按鈕對(duì)應(yīng)的序號(hào)? 看到上述問題,如果你能看出來這個(gè)問題實(shí)質(zhì)上是考對(duì)作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對(duì)作用域已經(jīng)理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...

    lemanli 評(píng)論0 收藏0
  • Js基礎(chǔ)知識(shí)(三) - 作用域與閉包

    摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內(nèi)部,也就是說為其聲明的變量隱式的劫持了所在的塊級(jí)作用域。 作用域與閉包 如何用js創(chuàng)建10個(gè)button標(biāo)簽,點(diǎn)擊每個(gè)按鈕時(shí)打印按鈕對(duì)應(yīng)的序號(hào)? 看到上述問題,如果你能看出來這個(gè)問題實(shí)質(zhì)上是考對(duì)作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對(duì)作用域已經(jīng)理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...

    XFLY 評(píng)論0 收藏0
  • Js基礎(chǔ)知識(shí)(三) - 作用域與閉包

    摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內(nèi)部,也就是說為其聲明的變量隱式的劫持了所在的塊級(jí)作用域。 作用域與閉包 如何用js創(chuàng)建10個(gè)button標(biāo)簽,點(diǎn)擊每個(gè)按鈕時(shí)打印按鈕對(duì)應(yīng)的序號(hào)? 看到上述問題,如果你能看出來這個(gè)問題實(shí)質(zhì)上是考對(duì)作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對(duì)作用域已經(jīng)理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...

    tanglijun 評(píng)論0 收藏0
  • Js基礎(chǔ)知識(shí)(三) - 作用域與閉包

    摘要:是詞法作用域工作模式。使用可以將變量綁定在所在的任意作用域中通常是內(nèi)部,也就是說為其聲明的變量隱式的劫持了所在的塊級(jí)作用域。 作用域與閉包 如何用js創(chuàng)建10個(gè)button標(biāo)簽,點(diǎn)擊每個(gè)按鈕時(shí)打印按鈕對(duì)應(yīng)的序號(hào)? 看到上述問題,如果你能看出來這個(gè)問題實(shí)質(zhì)上是考對(duì)作用域的理解,那么恭喜你,這篇文章你可以不用看了,說明你對(duì)作用域已經(jīng)理解的很透徹了,但是如果你看不出來這是一道考作用域的題目,...

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

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

0條評(píng)論

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