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

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

    了解JS中的var、let和const

    了解JS中的var、let和const

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

    var

    var 語句用來在 JavaScript 中聲明一個變量,該變量遵守以下規(guī)則:

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

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

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

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

    當在函數(shù)內(nèi)部聲明時,變量的作用域為該函數(shù):

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

    var 聲明會被提升:

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

    意外的全局變量

    在沒有任何聲明的情況下所分配的變量(無論是 var,let 還是 const)在默認情況下會成為全局變量

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

    為了消除這種行為,需要使用嚴格模式

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

    可重新分配和重新聲明

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

    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 語句在 JavaScript 中聲明一個變量,該變量遵守以下規(guī)則:

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

    塊作用域

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

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

    當在函數(shù)內(nèi)部聲明時,變量的作用域為該函數(shù):

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

    當在中聲明時,變量的作用域為該塊。以下是在塊中使用的例子:

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

    一個帶有 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 聲明可能會被提升,但是會產(chǎn)生暫存死區(qū)

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

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

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

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

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

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

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

    這是一個有效的重新分配的例子:

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

    const

    const 語句用來在 JavaScript 中聲明一個變量,該變量遵守以下規(guī)則:

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

    塊作用域

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

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

    當在函數(shù)內(nèi)部聲明時,變量的作用域為該函數(shù):

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

    當在中聲明時,變量的作用域為該塊。塊語句 {} 的例子:

    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 聲明可能會被提升,但是會進入暫存死區(qū)

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

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

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

    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)免費學習推薦:js視頻教程

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