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

資訊專欄INFORMATION COLUMN

javascript 聲明變量var、let、const詳解及示例

tuomao / 2743人閱讀

摘要:概述發(fā)布前,只能通過(guò)聲明變量的方式,常量塊級(jí)變量函數(shù)變量這些概念的差別都不能很好的體現(xiàn)出來(lái),于此同時(shí),加入你要使用或者提供一個(gè),聲明的變量可隨時(shí)被修改和重新分配的問(wèn)題,會(huì)讓你時(shí)刻擔(dān)心代碼是否能正常運(yùn)行。

1. var、let、const概述

ES6發(fā)布前,Javascript只能通過(guò)var聲明變量的方式,常量、塊級(jí)變量、函數(shù)變量這些概念的差別都不能很好的體現(xiàn)出來(lái),于此同時(shí),加入你要使用或者提供一個(gè)api,var聲明的變量可隨時(shí)被修改和重新分配的問(wèn)題,會(huì)讓你時(shí)刻擔(dān)心代碼是否能正常運(yùn)行。

ES6為我們帶來(lái)了let、const,我們先來(lái)了解一下三個(gè)標(biāo)識(shí)符的特征:

var: var定義一個(gè)變量,這個(gè)變量可以被重新分配、可能會(huì)被用于整個(gè)函數(shù)(Function Scope)
let: let定義一個(gè)變量,這個(gè)變量可以被重新分配,但let可以被用于塊級(jí)作用域(Block Scope),不存在變量提升
const: const定義一個(gè)常量,不可以被重新分配

下面,我們將從作用域、變量提升、變量重新分配幾個(gè)方面講解var、let、const的差別以及用法實(shí)踐。

2. 作用域

var的作用域

當(dāng)var定義的變量在函數(shù)內(nèi)部時(shí),通過(guò)函數(shù)外部調(diào)用變量,會(huì)導(dǎo)致 Uncaught ReferenceError: i is not defined 錯(cuò)誤:

function doSomeThing () {
    var i = 1;
}

console.log(i); // Uncaught ReferenceError: i is not defined

但是,在if、for、while這樣的塊級(jí)語(yǔ)句內(nèi)通過(guò)var聲明變量,仍然可以在塊語(yǔ)句外部訪問(wèn):

if (true) {
    var i = 1;
}
console.log(i); // 1

let的作用域

let定義了一個(gè)擁有塊級(jí)作用域?qū)傩缘淖兞?,同樣的代碼我們用let聲明變量可以看看結(jié)果:

if (true) {
    let j = 1;
}
console.log(j); // Uncaught ReferenceError: j is not defined

const的作用域

const的作用域規(guī)則和let類似,同樣的代碼我們用const聲明變量可以看看結(jié)果:

if (true) {
    const k = 1;
}
console.log(k); // Uncaught ReferenceError: k is not defined
3. 變量提升

先說(shuō)結(jié)論:var聲明的變量存在變量提升,let和const則不會(huì)

來(lái)一個(gè)例子體會(huì)一下:

console.log(m); // undefined
var m = 1;

console.log(n); // Uncaught ReferenceError: n is not defined
let n = 1;

console.log(v);
const v = 1; // Uncaught ReferenceError: v is not defined

推薦使用let和const理由之一,就是可以避免在使用后面聲明的變量時(shí)出現(xiàn)未知錯(cuò)誤。

4. let、const用法示例

明白var、let、const的區(qū)別,有助于我們用更簡(jiǎn)潔易懂的方式表達(dá)我們的代碼。

先看看什么情況下你才用var?

通過(guò)上面的介紹,我們大概了解到var區(qū)別于let、const的地方在是:函數(shù)作用域、可被修改、變量提升,所以在函數(shù)聲明優(yōu)先于變量聲明,但是函數(shù)調(diào)用在變量聲明之后的邏輯里可以用到var。

var f = {
    doThings: function () {
        console.log(i);
    }
}
var i = 1; // 聲明變量

// 函數(shù)調(diào)用
f.doThings(); // 1

使用let的場(chǎng)景?

let一般用于for(while)循環(huán)和數(shù)學(xué)表達(dá)式計(jì)算中

for (let i = 0, len = 100; i < len; i++) {
    console.log(i);
}

那么有個(gè)問(wèn)題,上面的for循環(huán)用var聲明i變量也是可以的?。?/p>

再來(lái)看一段代碼:

for (var i = 0; i < 100; i++) {
    setTimeout(function() {
        console.log(i);
    }, i * 1000);
}

// 控制臺(tái)會(huì)一直輸出100
// 改成 let

for (let i = 0; i < 100; i++) {
    setTimeout(function() {
        console.log(i);
    }, i * 1000);
}

解釋一下為什么會(huì)這樣:let的作用局的塊級(jí)作用局,即每次循環(huán)的i的作用域就是本次循環(huán),下一次循環(huán)重新定義變量i。

const的使用場(chǎng)景?

const聲明了一個(gè)常量,推薦將const常量用于別名,降低常量的記憶難度。

const COLOR_RED = "#F00";
const COLOR_GREEN = "#0F0";
const COLOR_BLUE = "#00F";
const COLOR_ORANGE = "#FF7F00";
結(jié)束

建議在"use strict"模式下,使用let和const替代var,以保證代碼的整潔和可讀。

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

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

相關(guān)文章

  • JavaScript聲明變量詳解

    摘要:命令用于規(guī)定模塊的對(duì)外接口,命令用于輸入其他模塊提供的功能所以在一定程度上來(lái)說(shuō),也具有聲明變量的功能。當(dāng)沒(méi)有聲明,直接給變量賦值時(shí),會(huì)隱式地給變量聲明,此時(shí)這個(gè)變量作為全局變量存在。 前言 如果文章中有出現(xiàn)紕漏、錯(cuò)誤之處,還請(qǐng)看到的小伙伴多多指教,先行謝過(guò) 在ES5階段,JavaScript 使用 var 和 function 來(lái)聲明變量, ES6 中又添加了let、const、imp...

    paulquei 評(píng)論0 收藏0
  • ES6 變量聲明與賦值:值傳遞、淺拷貝與深拷貝詳解

    摘要:變量聲明與賦值值傳遞淺拷貝與深拷貝詳解歸納于筆者的現(xiàn)代開(kāi)發(fā)語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。變量聲明在中,基本的變量聲明可以用方式允許省略,直接對(duì)未聲明的變量賦值。按值傳遞中函數(shù)的形參是被調(diào)用時(shí)所傳實(shí)參的副本。 ES6 變量聲明與賦值:值傳遞、淺拷貝與深拷貝詳解歸納于筆者的現(xiàn)代 JavaScript 開(kāi)發(fā):語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。本文首先介紹 ES6 中常用的三種變量聲明方式,然后討論了...

    snowLu 評(píng)論0 收藏0
  • 深入理解ES6 - var-let-const

    摘要:聲明變量不存在變量提升。臨時(shí)死區(qū),而且不能在聲明之前訪問(wèn)它。禁止重復(fù)聲明相同的變量,否則報(bào)錯(cuò)。不存在變量提升,一旦執(zhí)行快外就會(huì)立即銷毀。聲明不允許修改綁定,但允許修改值,也就是說(shuō)用創(chuàng)建對(duì)象后,可以修改該對(duì)象的屬性值。 知識(shí)點(diǎn) var 聲明變量: 1、存在變量提升,實(shí)際上var無(wú)論在哪里聲明,都會(huì)被當(dāng)做當(dāng)前的作用域頂部聲明變量。 2、可以重復(fù)聲明,后聲明的變量會(huì)覆蓋前聲明的變量。 let...

    alexnevsky 評(píng)論0 收藏0
  • ES5和ES6作用域詳解

    摘要:允許在塊級(jí)作用域內(nèi)聲明函數(shù)。上面代碼中,存在全局變量,但是塊級(jí)作用域內(nèi)又聲明了一個(gè)局部變量,導(dǎo)致后者綁定這個(gè)塊級(jí)作用域,所以在聲明變量前,對(duì)賦值會(huì)報(bào)錯(cuò)。 ES5的作用域 變量起作用的范圍,js中能創(chuàng)建作用域的只能是函數(shù) { let a = 1; var b = 2; } console.log(a); // a is not defined console.log(b); //...

    Dr_Noooo 評(píng)論0 收藏0
  • ES6語(yǔ)法詳解(一)

    摘要:凍結(jié)對(duì)象可以使用方法。對(duì)象的解構(gòu)賦值必須要屬性名相同,順序毫無(wú)影響。數(shù)組解構(gòu)賦值默認(rèn)值,當(dāng)?shù)忍?hào)右邊的值時(shí),默認(rèn)值生效。 let變量 let聲明的變量在let命令所在的代碼塊中有效。不存在變量提升,只能先聲明后使用。 暫存死區(qū) 如果區(qū)塊中存在let和const命令,這個(gè)區(qū)塊對(duì)這些命令聲明的變量,從一開(kāi)始就形成了封閉作用域。凡是在聲明之前就使用這些變量。 var a = 1; { ...

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

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

0條評(píng)論

閱讀需要支付1元查看
<