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

資訊專(zhuān)欄INFORMATION COLUMN

const & let

or0fun / 3254人閱讀

摘要:前世在還未出現(xiàn)前,的世界一直是的統(tǒng)治在中用于變量聲明的關(guān)鍵字。的出現(xiàn)給帶來(lái)了塊級(jí)作用域,解決了變量提升,禁止了重復(fù)聲明變量,讓少了很多疑惑的地方。時(shí)代已經(jīng)過(guò)去了,各種特性用起來(lái)。

前世
在 const & let 還未出現(xiàn)前,JS 的世界一直是 var的統(tǒng)治

var:在JS中用于變量聲明的關(guān)鍵字。

特點(diǎn):

變量提升

只有函數(shù)作用域或者全局作用域,沒(méi)有塊級(jí)作用域

重復(fù)聲明變量

循環(huán)體重的閉包會(huì)出現(xiàn)問(wèn)題

…….

變量提升

function test(tag) {
    console.log(a,b);   // a,b在下面聲明,但是會(huì)打印出undefined,不會(huì)報(bào)錯(cuò)
    
    if(10 >= tag) {
        var a = tag + 1;
    } else {
        var b = tag - 1;
    }
}

在瀏覽器預(yù)解析機(jī)制中,加載函數(shù)的時(shí)候,此時(shí)的作用域?yàn)楹瘮?shù)作用域,函數(shù)作用域中JS會(huì)先將所有的聲明置頂。

function test(tag) {
    var a,b;            // 將聲明置頂,但是賦值并不會(huì)
    console.log(a,b);   // a,b在下面聲明,但是會(huì)打印出undefined,不會(huì)報(bào)錯(cuò)
    
    if(10 >= tag) {
        var a = tag + 1;
    } else {
        var b = tag - 1;
    }
}

只有函數(shù)作用域以及全局作用域,沒(méi)有塊級(jí)作用域

function test(tag) {
    console.log(a,b);   // a,b在下面聲明,但是會(huì)打印出undefined,不會(huì)報(bào)錯(cuò)
    
    if(10 >= tag) {
        var a = tag + 1;
    } else {
        var b = tag - 1;
    }
    
    console.log(a);        // 9
}

test(8)  // 9

按照其他語(yǔ)言規(guī)則 if 是一個(gè)程序塊,在 if 中聲明的變量作用域只能在 if 中,但是 JS 因?yàn)橹挥泻瘮?shù)作用域和全局作用域,所以才會(huì)導(dǎo)致在 if 判斷外還可以訪(fǎng)問(wèn) if 的變量

重復(fù)聲明變量

var a = 1;
var a = 2;

console.log(a); // 2

在使用var的時(shí)候允許重復(fù)聲明變量也是令人頭痛的事情,也許因?yàn)檫@個(gè)機(jī)制,可能就會(huì)出現(xiàn)bug

循環(huán)體重的閉包會(huì)出現(xiàn)問(wèn)題

var arr = [];
for(var i = 0; i < 3; i++) {
    arr.push(function () {
        return i;
    })
}

for(var j = 0; j < 3; j++) {
    console.log(arr[j]());    // 3,3,3
}

將var -> let
將會(huì)打印出 0,1,2

因?yàn)槿狈K作用域所以導(dǎo)致問(wèn)題出現(xiàn)

今生

如今距離ES6規(guī)范的出現(xiàn)已經(jīng)過(guò)去了4年多了,在項(xiàng)目中也早已開(kāi)始大量使用ES6規(guī)范編寫(xiě)代碼了。var也不再是JS世界的唯一了,

JS 世界出現(xiàn)了const & let。

const & let 的出現(xiàn)給JS帶來(lái)了塊級(jí)作用域,解決了變量提升,禁止了重復(fù)聲明變量,讓JS少了很多疑惑的地方。

let & const

相同點(diǎn):

具有塊級(jí)作用域

禁止重復(fù)聲明變量

不會(huì)產(chǎn)生變量提升

區(qū)別:

let

使用let聲明的基本類(lèi)型變量是可以改變值

let a = 12;
a = 13;
return a;    // 13

使用let聲明引用類(lèi)型的變量是可以改變引用的

let info = {
    name: "ming995",
    age: 25,
    sayHi: function() {
        console.log(`Hi I"m ${this.name}`)
    }
};

let heInfo = {};

heInfo = info;

heInfo.name = "Jack";

console.log(heInfo);

const

使用const聲明的基本類(lèi)型變量是不可以改變值

const a = 13;
a = 14;
return a; // 報(bào)錯(cuò)

使用const聲明引用類(lèi)型的變量是不可以改變引用的

const info = {
    name: "ming995",
    age: 25,
    sayHi: function() {
        console.log(`Hi I"m ${this.name}`)
    }
};

const heInfo = {};

heInfo = info;        // 報(bào)錯(cuò)
    
heInfo.name = "Jack";

console.log(heInfo);

但是我們可以操作const聲明的引用類(lèi)型的屬性值

const info = {
    name: "ming995",
    age: 25,
    sayHi: function() {
        console.log(`Hi I"m ${this.name}`)
    }
};

info.language = "js";

console.log(info);
總結(jié)

之前對(duì)于const的理解有偏差,所以就寫(xiě)這篇文章。var時(shí)代已經(jīng)過(guò)去了,ES6各種特性用起來(lái)。

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

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

相關(guān)文章

  • JS中letconst命令如何使用

      本篇文章主要講述JS中l(wèi)et與const命令使用,通過(guò)代碼展示給各位?! et命令  基本使用  在ES6中,let命令是新增的聲明變量,與var的差異在于let無(wú)法重復(fù)聲明,且let有效只是在其命令的代碼塊內(nèi),let禁止變量出現(xiàn)變量提升現(xiàn)象,let的特點(diǎn)就是通過(guò)暫時(shí)性死區(qū)的方式來(lái)避免程序上的錯(cuò)誤  代碼塊:使用{}包括起來(lái)的內(nèi)容  聲明變量:分配一個(gè)存儲(chǔ)空間  不可重復(fù)聲明:let聲明過(guò)后...

    3403771864 評(píng)論0 收藏0
  • ES6筆記之 let &amp;&amp; const

    摘要:聲明的變量只在其所在的代碼塊內(nèi)有效。只要在聲明之前使用這些變量,就會(huì)報(bào)錯(cuò)。在語(yǔ)法上稱(chēng)為暫時(shí)性死區(qū)有時(shí)候,會(huì)不經(jīng)間遇到比較隱蔽的死區(qū),不太容易被發(fā)現(xiàn)。不允許重復(fù)聲明不允許在相同的作用域內(nèi)聲明同一個(gè)變量。一旦聲明,其值就不能再改變。 let && const let let聲明的變量只在其所在的代碼塊內(nèi)有效。 { let a = 10; } console.log(a) //R...

    aristark 評(píng)論0 收藏0
  • es6必會(huì)之let &amp;&amp; const

    摘要:副作用,無(wú)副作用可執(zhí)行和關(guān)鍵詞。和不能像一樣同一個(gè)下聲明多次和不會(huì)像一樣變量聲明提升原因是,存在因此不能,賦值前使用變量。 showImg(https://segmentfault.com/img/bVbhPlD?w=1271&h=715); 關(guān)鍵詞: let ,const, blocking scope ,temporal dead zone,redeclaration,reassi...

    ygyooo 評(píng)論0 收藏0
  • 通過(guò)JavaScript實(shí)現(xiàn)撲克牌游戲的示例代碼

      我們說(shuō)下想要實(shí)現(xiàn),一副牌里有54張,我們可以知道 3 - 2 的牌總共有13張,這分為4個(gè)花色是 ?? ?? ?? ?? 另外加上2個(gè)大小王!第一步:形成一個(gè)數(shù)組, 就要寫(xiě)一個(gè)函數(shù),利用牌數(shù)量和花色,這樣可以用來(lái)形成一個(gè)雙重循環(huán)將 number 里面的內(nèi)容 和 flower 里面的內(nèi)容 進(jìn)行一個(gè)循環(huán)嵌入?最后在用 push 生成一個(gè)對(duì)象放到數(shù)組的后面?再到最后放入 大小王 。  constnu...

    3403771864 評(píng)論0 收藏0
  • JS前端千萬(wàn)級(jí)彈幕數(shù)據(jù)循環(huán)優(yōu)化示例

    大數(shù)據(jù)中時(shí)常都會(huì)有優(yōu)化,這篇文章要和大家降的就是如何按照特定的條件刪除一個(gè)數(shù)組?  1、如何刪除數(shù)組中的元素  場(chǎng)景:有一個(gè)數(shù)組,需要?jiǎng)h除滿(mǎn)足條件的數(shù)組?! ∈纠骸 onstarr=[1,2,3,4,5,6,7,8]  刪除小于5的元素,刪除后的元素為  constarr2=[5,6,7,8]  代碼實(shí)現(xiàn):  constarr=[1,2,3,4,5,6,7,8]   for(leti=0,le...

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

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

0條評(píng)論

or0fun

|高級(jí)講師

TA的文章

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