第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

let和const

標(biāo)簽:
JavaScript

let

let是在ES6加入的新的变量声明方法,let声明变量的方法和var类似:

let a = 'hello';var b = 'hello';

let的功能是声明一个作用域被限制在块级的变量,而var声明的变量的作用域只能是全局的或者整个函数块的

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);
}

再举一个例子:

var a = 1;var b = 2;if (a === 1) {    var a = 11;    let b = 22;    // 11
    console.log(a);    // 22
    console.log(b);
}// 11console.log(a);// 2console.log(b);

另外,如果作用域位于程序的顶层,var会挂载到window上,而let不会:

var a = 'a';let b = 'b';// this -> window// aconsole.log(this.a);// undefinedconsole.log(this.b);// aconsole.log(window.a);// undefinedconsole.log(window.b);

在相同的函数或块作用域内重新声明同一个变量会引发一个重复定义的SyntaxError

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

letvar都会在声明所在的作用域顶部被创建,这被称为变量提升,但是不同的是var的创建会伴随着一个undefined值,在赋值之后才会改变,而let没有被赋值之前是不会被初始化的,如果在这期间引用let声明的变量,会导致一个ReferenceError,直到初始化之前,该变量都处于暂存死区:

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

两个复杂一点的例子:

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的基本作用是声明一个作用域被限制在块级的常量,其作用域和let一样,基本使用也和let类似,但是const的特点是const声明的值一经创建无法被改变

使用const会创建一个值的只读引用,这意味着const声明的对象本省的引用是无法被改变的,但是其属性是可以被改变的,因为改变其属性并不会引起其引用的变化

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

基本使用:

const a = 'abc';

无法被重复定义:

const a = 'abc';// SyntaxError: Identifier 'a' has already been declaredconst a = 'abc';

声明时就必须赋值:

// SyntaxError: Missing initializer in const declarationconst a;

无法被修改:

const a = 'a';// TypeError: Assignment to constant variablea = 'b';

块级作用域:

if (true) {    var a = 'a';    const b = 'b';    // a
    console.log(a);    // b
    console.log(b);
}// aconsole.log(a);// ReferenceError: not definedconsole.log(b);

作用域在程序顶层时不会挂在window对象上:

var a = 'a';const b = 'b';// this -> window// aconsole.log(this.a);// undefinedconsole.log(this.b);// aconsole.log(window.a);// undefinedconsole.log(window.b);



作者:Kindem
链接:https://www.jianshu.com/p/7c59a6d78b5e


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消