国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

const & let

or0fun / 3217人閱讀

摘要:前世在還未出現前,的世界一直是的統治在中用于變量聲明的關鍵字。的出現給帶來了塊級作用域,解決了變量提升,禁止了重復聲明變量,讓少了很多疑惑的地方。時代已經過去了,各種特性用起來。

前世
在 const & let 還未出現前,JS 的世界一直是 var的統治

var:在JS中用于變量聲明的關鍵字。

特點:

變量提升

只有函數作用域或者全局作用域,沒有塊級作用域

重復聲明變量

循環體重的閉包會出現問題

…….

變量提升

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

在瀏覽器預解析機制中,加載函數的時候,此時的作用域為函數作用域,函數作用域中JS會先將所有的聲明置頂。

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

只有函數作用域以及全局作用域,沒有塊級作用域

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

test(8)  // 9

按照其他語言規則 if 是一個程序塊,在 if 中聲明的變量作用域只能在 if 中,但是 JS 因為只有函數作用域和全局作用域,所以才會導致在 if 判斷外還可以訪問 if 的變量

重復聲明變量

var a = 1;
var a = 2;

console.log(a); // 2

在使用var的時候允許重復聲明變量也是令人頭痛的事情,也許因為這個機制,可能就會出現bug

循環體重的閉包會出現問題

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
將會打印出 0,1,2

因為缺乏塊作用域所以導致問題出現

今生

如今距離ES6規范的出現已經過去了4年多了,在項目中也早已開始大量使用ES6規范編寫代碼了。var也不再是JS世界的唯一了,

JS 世界出現了const & let。

const & let 的出現給JS帶來了塊級作用域,解決了變量提升,禁止了重復聲明變量,讓JS少了很多疑惑的地方。

let & const

相同點:

具有塊級作用域

禁止重復聲明變量

不會產生變量提升

區別:

let

使用let聲明的基本類型變量是可以改變值

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

使用let聲明引用類型的變量是可以改變引用的

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聲明的基本類型變量是不可以改變值

const a = 13;
a = 14;
return a; // 報錯

使用const聲明引用類型的變量是不可以改變引用的

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

const heInfo = {};

heInfo = info;        // 報錯
    
heInfo.name = "Jack";

console.log(heInfo);

但是我們可以操作const聲明的引用類型的屬性值

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

info.language = "js";

console.log(info);
總結

之前對于const的理解有偏差,所以就寫這篇文章。var時代已經過去了,ES6各種特性用起來。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100786.html

相關文章

  • JS中letconst命令如何使用

      本篇文章主要講述JS中let與const命令使用,通過代碼展示給各位。  let命令  基本使用  在ES6中,let命令是新增的聲明變量,與var的差異在于let無法重復聲明,且let有效只是在其命令的代碼塊內,let禁止變量出現變量提升現象,let的特點就是通過暫時性死區的方式來避免程序上的錯誤  代碼塊:使用{}包括起來的內容  聲明變量:分配一個存儲空間  不可重復聲明:let聲明過后...

    3403771864 評論0 收藏0
  • ES6筆記之 let &amp;&amp; const

    摘要:聲明的變量只在其所在的代碼塊內有效。只要在聲明之前使用這些變量,就會報錯。在語法上稱為暫時性死區有時候,會不經間遇到比較隱蔽的死區,不太容易被發現。不允許重復聲明不允許在相同的作用域內聲明同一個變量。一旦聲明,其值就不能再改變。 let && const let let聲明的變量只在其所在的代碼塊內有效。 { let a = 10; } console.log(a) //R...

    aristark 評論0 收藏0
  • es6必會之let &amp;&amp; const

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

    ygyooo 評論0 收藏0
  • 通過JavaScript實現撲克牌游戲的示例代碼

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

    3403771864 評論0 收藏0
  • JS前端千萬級彈幕數據循環優化示例

    大數據中時常都會有優化,這篇文章要和大家降的就是如何按照特定的條件刪除一個數組?  1、如何刪除數組中的元素  場景:有一個數組,需要刪除滿足條件的數組。  示例:  constarr=[1,2,3,4,5,6,7,8]  刪除小于5的元素,刪除后的元素為  constarr2=[5,6,7,8]  代碼實現:  constarr=[1,2,3,4,5,6,7,8]   for(leti=0,le...

    3403771864 評論0 收藏0

發表評論

0條評論

or0fun

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<