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

資訊專欄INFORMATION COLUMN

let和const

G9YH / 3588人閱讀

摘要:發(fā)布自的博客,歡迎大家轉(zhuǎn)載,但是要注意注明出處。另外,該文章收納在的個(gè)人的知識整理倉庫,歡迎投稿是在加入的新的變量聲明方法,聲明變量的方法和類似的功能是聲明一個(gè)作用域被限制在塊級的變量,而聲明的變量的作用域只能是全局的或者整個(gè)函數(shù)塊的再舉一

發(fā)布自Kindem的博客,歡迎大家轉(zhuǎn)載,但是要注意注明出處。另外,該文章收納在Kindem的個(gè)人的 IT 知識整理倉庫,歡迎 Star、Fork、投稿
let

let是在ES6加入的新的變量聲明方法,let聲明變量的方法和var類似:

let a = "hello";
var b = "hello";

let的功能是聲明一個(gè)作用域被限制在塊級的變量,而var聲明的變量的作用域只能是全局的或者整個(gè)函數(shù)塊的

function varTest() {
    var x = 1;
    if (true) {
        var x = 2;
        // 2
        console.log(x);
    }
    // 2
    console.log(x);
}

function letTest() {
    let x = 1;
    if (true) {
        let x = 2;
        // 2
        console.log(x);
    }
    // 1
    console.log(x);
}

再舉一個(gè)例子:

var a = 1;
var b = 2;

if (a === 1) {
    var a = 11;
    let b = 22;

    // 11
    console.log(a);
    // 22
    console.log(b);
}

// 11
console.log(a);
// 2
console.log(b);

另外,如果作用域位于程序的頂層,var會(huì)掛載到window上,而let不會(huì):

var a = "a";
let b = "b";

// this -> window
// a
console.log(this.a);
// undefined
console.log(this.b);
// a
console.log(window.a);
// undefined
console.log(window.b);

在相同的函數(shù)或塊作用域內(nèi)重新聲明同一個(gè)變量會(huì)引發(fā)一個(gè)重復(fù)定義的SyntaxError

if (x) {
    let foo;
    // SyntaxError
    let foo;
}

letvar都會(huì)在聲明所在的作用域頂部被創(chuàng)建,這被稱為變量提升,但是不同的是var的創(chuàng)建會(huì)伴隨著一個(gè)undefined值,在賦值之后才會(huì)改變,而let沒有被賦值之前是不會(huì)被初始化的,如果在這期間引用let聲明的變量,會(huì)導(dǎo)致一個(gè)ReferenceError,直到初始化之前,該變量都處于暫存死區(qū):

function test() {
    // undefined
    console.log(bar);
    // ReferenceError
    console.log(foo);
    var bar = 1;
    let foo = 2;
}
test();

兩個(gè)復(fù)雜一點(diǎn)的例子:

function test(){
    var foo = 33;
    if (true) {
        // ReferenceError
        let foo = (foo + 55);
    }
}
test();
function go(n) {
    // Object {a: [1,2,3]}
    console.log(n);

    // ReferenceError
    for (let n of n.a) {
        console.log(n);
    }
}
go({a: [1, 2, 3]});
const

const的基本作用是聲明一個(gè)作用域被限制在塊級的常量,其作用域和let一樣,基本使用也和let類似,但是const的特點(diǎn)是const聲明的值一經(jīng)創(chuàng)建無法被改變

使用const會(huì)創(chuàng)建一個(gè)值的只讀引用,這意味著const聲明的對象本省的引用是無法被改變的,但是其屬性是可以被改變的,因?yàn)楦淖兤鋵傩圆⒉粫?huì)引起其引用的變化

下面給出const的一些特性的例子:

基本使用:

const a = "abc";

無法被重復(fù)定義:

const a = "abc";
// SyntaxError: Identifier "a" has already been declared
const a = "abc";

聲明時(shí)就必須賦值:

// SyntaxError: Missing initializer in const declaration
const a;

無法被修改:

const a = "a";
// TypeError: Assignment to constant variable
a = "b";

塊級作用域:

if (true) {
    var a = "a";
    const b = "b";
    // a
    console.log(a);
    // b
    console.log(b);
}
// a
console.log(a);
// ReferenceError: not defined
console.log(b);

作用域在程序頂層時(shí)不會(huì)掛在window對象上:

var a = "a";
const b = "b";

// this -> window
// a
console.log(this.a);
// undefined
console.log(this.b);
// a
console.log(window.a);
// undefined
console.log(window.b);

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

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

相關(guān)文章

  • varlet/const的區(qū)別

    showImg(https://segmentfault.com/img/remote/1460000017757580); let和const是 ES6 新增的命令,用于聲明變量,這兩個(gè)命令跟 ES5 的var有許多不同,并且let和const也有一些細(xì)微的不同,再認(rèn)真閱讀了阮一峰老師的文檔后,發(fā)現(xiàn)還是有一些不知道的細(xì)節(jié)... 博客、前端積累文檔、公眾號、GitHub 內(nèi)容: var和let...

    SHERlocked93 評論0 收藏0
  • ES6學(xué)習(xí) 第一章 let const 命令

    摘要:外層作用域不報(bào)錯(cuò)正常輸出塊級作用域與函數(shù)聲明規(guī)定,函數(shù)只能在頂層作用域和函數(shù)作用域之中聲明,不能在塊級作用域聲明。規(guī)定,塊級作用域之中,函數(shù)聲明語句的行為類似于,在塊級作用域之外不可引用。同時(shí),函數(shù)聲明還會(huì)提升到所在的塊級作用域的頭部。 前言:最近開始看阮一峰老師的《ECMAScript 6 入門》(以下簡稱原...

    番茄西紅柿 評論0 收藏2637
  • javascript 聲明變量var、let、const詳解及示例

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

    tuomao 評論0 收藏0
  • javascript中var、let、const聲明的區(qū)別

    摘要:聲明的變量存在變量提升,聲明的變量不存在變量提升。聲明的變量允許重新賦值,聲明的變量不允許重新賦值。注意跨腳本聲明重復(fù)變量也會(huì)報(bào)錯(cuò)。中出現(xiàn)的任何元素在聲明中出現(xiàn),語法錯(cuò)誤。中的是如此的怪異。對中的聲明進(jìn)行實(shí)例化。 我在上一篇文章javascript中詞法環(huán)境、領(lǐng)域、執(zhí)行上下文以及作業(yè)詳解中的最后稍微提到了有關(guān)var、let、const聲明的區(qū)別,在本篇中我會(huì)重點(diǎn)來分析它們之間到底有什么...

    Yujiaao 評論0 收藏0
  • ES6 系列之 let const

    摘要:塊級作用域存在于函數(shù)內(nèi)部塊中字符和之間的區(qū)域和塊級聲明用于聲明在指定塊的作用域之外無法訪問的變量。和都是塊級聲明的一種。值得一提的是聲明不允許修改綁定,但允許修改值。這意味著當(dāng)用聲明對象時(shí)沒有問題報(bào)錯(cuò)臨時(shí)死區(qū)臨時(shí)死區(qū),簡寫為。 塊級作用域的出現(xiàn) 通過 var 聲明的變量存在變量提升的特性: if (condition) { var value = 1; } console.lo...

    PascalXie 評論0 收藏0
  • ES6系列之 let const

    摘要:聲明的變量不得改變值,這意味著,一旦聲明變量,就必須立即初始化,不能留到以后賦值。這在語法上,稱為暫時(shí)性死區(qū),簡稱。這表明函數(shù)內(nèi)部的變量與循環(huán)變量不在同一個(gè)作用域,有各自單獨(dú)的作用域。系列文章系列文章地址 showImg(https://segmentfault.com/img/bVbrjjC); 為什么需要塊級作用域 ES5 只有全局作用域和函數(shù)作用域,沒有塊級作用域,這帶來很多不合...

    libxd 評論0 收藏0

發(fā)表評論

0條評論

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