亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    了解JS中的var、let和const

    了解JS中的var、let和const

    本篇文章給大家介紹一下JavaScript 的 var,let 和 const,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)大家有所幫助。

    var

    var 語(yǔ)句用來(lái)在 JavaScript 中聲明一個(gè)變量,該變量遵守以下規(guī)則:

    • 作用域范圍是函數(shù)作用域或全局作用域的。
    • 不受暫存死區(qū)(TDZ)的限制。
    • 它會(huì)在 window 上以相同的名稱(chēng)創(chuàng)建一個(gè)全局屬性。
    • 可分配的。
    • 可聲明的。

    函數(shù)作用域和全局作用域

    當(dāng)出現(xiàn)在全局作用域內(nèi)時(shí),var 創(chuàng)建一個(gè)全局變量。另外它還會(huì)在 window 上創(chuàng)建一個(gè)具有相同名稱(chēng)的 全局屬性

    var city = "Florence";  console.log(window.city); // "Florence"

    當(dāng)在函數(shù)內(nèi)部聲明時(shí),變量的作用域?yàn)樵摵瘮?shù):

    var city = "Florence";  function bubble() {   var city = "Siena";   console.log(city); }  bubble(); // "Siena"  console.log(city); // "Florence"

    var 聲明會(huì)被提升:

    function bubble() {   city = "Siena";   console.log(city);   var city; // hoists }  bubble(); // "Siena"

    意外的全局變量

    在沒(méi)有任何聲明的情況下所分配的變量(無(wú)論是 var,let 還是 const)在默認(rèn)情況下會(huì)成為全局變量

    function bubble() {   city = "Siena";   console.log(window.city); }  bubble(); // "Siena"

    為了消除這種行為,需要使用嚴(yán)格模式

    "use strict";  function bubble() {   city = "Siena";   console.log(window.city); }  bubble(); // ReferenceError: assignment to undeclared variable city

    可重新分配和重新聲明

    任何用 var 聲明的變量都可以在以后進(jìn)行重新分配重新聲明。重新聲明的例子:

    function bubble() {   var city = "Florence";   var city = "Siena";   console.log(city); }  bubble(); // "Siena"

    重新分配的例子:

    function bubble() {   var city = "Siena";   city = "Florence";   console.log(city); }  bubble(); // "Florence"

    let

    let 語(yǔ)句在 JavaScript 中聲明一個(gè)變量,該變量遵守以下規(guī)則:

    • 屬于塊作用域。
    • 受到暫存死區(qū)的約束。
    • 它不會(huì)在 window 上創(chuàng)建任何全局屬性。
    • 可分配的。
    • 不可重新聲明

    塊作用域

    let 聲明的變量不會(huì)在 window 上創(chuàng)建任何全局屬性:

    let city = "Florence";  console.log(window.city); // undefined

    當(dāng)在函數(shù)內(nèi)部聲明時(shí),變量的作用域?yàn)樵摵瘮?shù):

    let city = "Florence";  function bubble() {   let city = "Siena";   console.log(city); }  bubble(); // "Siena"  console.log(city); // "Florence"

    當(dāng)在中聲明時(shí),變量的作用域?yàn)樵搲K。以下是在塊中使用的例子:

    let city = "Florence";  {   let city = "Siena";   console.log(city); // "Siena"; }  console.log(city); // "Florence"

    一個(gè)帶有 if 塊的例子:

    let city = "Florence";  if (true) {   let city = "Siena";   console.log(city); // "Siena"; }  console.log(city); // "Florence"

    相反,var 并不受到塊的限制:

    var city = "Florence";  {   var city = "Siena";   console.log(city); // "Siena"; }  console.log(window.city); // "Siena"

    暫存死區(qū)

    let 聲明可能會(huì)被提升,但是會(huì)產(chǎn)生暫存死區(qū)

    function bubble() {   city = "Siena";   console.log(city); // TDZ   let city; }  bubble();  // ReferenceError: can't access lexical declaration 'city' before initialization

    暫存死區(qū)可防止在初始化之前訪問(wèn) let 聲明。另外一個(gè)例子:

    function bubble() {   console.log(city); // TDZ   let city = "Siena"; }  bubble();  // ReferenceError: can't access lexical declaration 'city' before initialization

    可以看到兩個(gè)例子中產(chǎn)生的異常都是一樣的:證明了“暫存死區(qū)”的出現(xiàn)。

    可重新分配,不可重新聲明

    任何用 let 聲明的變量都不能重新聲明。重新聲明引發(fā)異常的例子:

    function bubble() {   let city = "Siena";   let city = "Florence";   console.log(city); }  bubble(); // SyntaxError: redeclaration of let city

    這是一個(gè)有效的重新分配的例子:

    function bubble() {   let city = "Siena";   city = "Florence";   console.log(city); }  bubble(); // "Florence"

    const

    const 語(yǔ)句用來(lái)在 JavaScript 中聲明一個(gè)變量,該變量遵守以下規(guī)則:

    • 是屬于塊作用域的。
    • 受到“暫存死區(qū)”的約束。
    • 它不會(huì)在 window 上創(chuàng)建任何全局屬性。
    • 不可重新分配
    • 不可重新聲明。

    塊作用域

    用 const 聲明的變量不會(huì)在 window 上創(chuàng)建任何全局屬性:

    const city = "Florence";  console.log(window.city); // undefined

    當(dāng)在函數(shù)內(nèi)部聲明時(shí),變量的作用域?yàn)樵摵瘮?shù):

    const city = "Florence";  function bubble() {   const city = "Siena";   console.log(city); }  bubble(); // "Siena"  console.log(city); // "Florence"

    當(dāng)在中聲明時(shí),變量的作用域?yàn)樵搲K。塊語(yǔ)句 {} 的例子:

    const city = "Florence";  {   const city = "Siena";   console.log(city); // "Siena"; }  console.log(city); // "Florence"

    if 塊中的例子:

    const city = "Florence";  if (true) {   const city = "Siena";   console.log(city); // "Siena"; }  console.log(city); // "Florence"

    暫存死區(qū)

    const 聲明可能會(huì)被提升,但是會(huì)進(jìn)入暫存死區(qū)

    function bubble() {   console.log(city);   const city = "Siena"; }  bubble();  // ReferenceError: can't access lexical declaration 'city' before initialization

    不可重新分配,不可重新聲明

    const 聲明的任何變量都不能重新聲明,也不能重新分配。 一個(gè)在重新聲明時(shí)拋出異常的例子:

    function bubble() {   const city = "Siena";   const city = "Florence";   console.log(city); }  bubble(); // SyntaxError: redeclaration of const city

    重新分配的例子示例:

    function bubble() {   const city = "Siena";   city = "Florence";   console.log(city); }  bubble(); // TypeError: invalid assignment to const 'city'

    總結(jié)

    塊作用域 暫存死區(qū) 創(chuàng)建全局屬性 可重新分配 可重新聲明
    var
    let
    const

    英文原文地址:https://www.valentinog.com/blog/var/

    作者:Valentino

    相關(guān)免費(fèi)學(xué)習(xí)推薦:js視頻教程

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)