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

資訊專欄INFORMATION COLUMN

ES6精華:Let & Const

UnixAgain / 341人閱讀

摘要:所以,最終極的辦法是一層一層凍結(jié)所有對(duì)象。塊級(jí)作用域使呈現(xiàn)出塊級(jí)作用域的特征。聲明的變量僅存在于當(dāng)前塊級(jí)作用域中。在中,嚴(yán)格模式下等價(jià)于使用聲明,非嚴(yán)格下等價(jià)于使用。在中使用聲明的變量,為了保持程序的嚴(yán)謹(jǐn)性,不允許被訪問。

letconst都是聲明變量的新方式。
一般的,由于這兩種聲明方式的特性,現(xiàn)在項(xiàng)目組的開發(fā)規(guī)范中都會(huì)要求:不使用var而是letconst。

Const

const用于定義不可更改的常量。
不可更改,意思是標(biāo)識(shí)符存儲(chǔ)的值不可更改。
這意味著,如果存儲(chǔ)的是對(duì)象的地址,改動(dòng)地址指向的內(nèi)存是可以的。

"use strict";

const OBJ = {};
OBJ.name = "OBJ"; // 成功
OBJ = {}; // 失敗,改變了存儲(chǔ)的地址。

由此可聯(lián)想到ES5的凍結(jié)對(duì)象。
如果對(duì)象的屬性是個(gè)指針,依然是可以修改的。
所以,最終極的辦法是一層一層凍結(jié)所有對(duì)象。

塊級(jí)作用域

let使{}呈現(xiàn)出塊級(jí)作用域的特征。
聲明的變量僅存在于當(dāng)前塊級(jí)作用域中。
不可在同一塊級(jí)作用域中重復(fù)聲明變量。
一旦在塊級(jí)作用域中聲明了變量,此變量便綁定在這個(gè)區(qū)域,不再受外部的影響。

"use strict";

if (true) {
  var a = 1;
  let b = 2;
}
console.log(a); // 1
console.log(b); // error, b is not defined.
定義函數(shù)

在塊級(jí)作用域中,優(yōu)先使用表達(dá)式聲明函數(shù)(let, const, var)。
不要使用聲明式聲明函數(shù),因?yàn)椴煌瑸g覽器在這方面的實(shí)現(xiàn)有所差異。
Chrome中,嚴(yán)格模式下等價(jià)于使用let聲明,非嚴(yán)格下等價(jià)于使用var。

// 在 Chrome 66 瀏覽器。

// --- 嚴(yán)格模式
"use strict";

console.log(fn); // error, fn is not defined.
if (true) {
  function fn() {
    console.log("hi");
  }
}
console.log(fn); // error, fn is not defined.

// --- 非嚴(yán)格模式。
console.log(fn); // undefined
if (true) {
  function fn() {
    console.log("hi");
  }
}
console.log(fn); // function
暫時(shí)性死區(qū)

塊級(jí)作用域的頂部到聲明此變量之前的區(qū)域,稱為此變量的暫時(shí)性死區(qū)。
在暫時(shí)性死區(qū)內(nèi),不能使用該變量。

"use strict";

let a = 1;
{
  // 在這里使用 a 會(huì)報(bào)錯(cuò)。
  let a = 2;
}

// 對(duì)比 var
var b = 2;
fn();
console.log(b); // 2

function fn() {
  b = 1;
  var b;
  console.log(b); // 1
}

let也存在變量提升,只不過對(duì)待方式和之前不同。
變量提升,簡單的說就是在執(zhí)行代碼前先會(huì)看到底聲明了哪些變量和方法。
ES5中使用var聲明的變量,在聲明之前可以訪問,其值為undefined
ES6中使用let聲明的變量,為了保持程序的嚴(yán)謹(jǐn)性,不允許被訪問。

解綁全局變量

在之前的版本中,全局變量等價(jià)于頂層對(duì)象的相應(yīng)屬性。
ES6中新的變量聲明方式(let, const, class)定義的全局變量與頂層對(duì)象的屬性脫鉤。

const MY = {};
console.log(window.MY); // undefined
替代自執(zhí)行函數(shù) 定義臨時(shí)變量
// ---ES5
(function() {
  var a = 1;
})();

// ---ES6
{
  let a = 1;
}
簡化for循化
// ---ES5
// 使用自執(zhí)行函數(shù)獲取并切斷變量,再用閉包存儲(chǔ)變量
var fns = [];
for (var i = 0; i < 7; i++) {
  fns[i] = (function(n) {
    return function() {
      console.log(n);
    };
  })(i);
}
fns[3](); // 3

// ---ES6
var fns = [];
for (let i = 0; i < 7; i++) {
  fns[i] = function() {
    console.log(i);
  };
}
fns[3](); // 3
for+let組合的理解

for后面的()是一個(gè)獨(dú)立的作用域。
for后面的{}是一個(gè)獨(dú)立的作用域。
for后面的{}中的作用域鏈為:本身 > () > 外部。
每次循環(huán),都會(huì)重新在()里定義i,并將其值設(shè)置為其上次循環(huán)結(jié)束的值。

// 證明 () 是一個(gè)獨(dú)立的作用域。
let i = 3;
for (let i = 0; i< 7; i++) {}
console.log(i); // 3

// 證明 {} 的作用域鏈為:本身 -> ()作用域 -> 外部作用域。
for (let i = 0; i< 7; i++) {
  i = 7;
  console.log(i); // 紙打印一次,值為 7 。
}
for (let i = 0; i< 7; i++) {
  let i = "hi";
  console.log(i); // 打印 7 次 "hi" 。
}

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

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

相關(guān)文章

  • Set &amp; Map:新生的數(shù)據(jù)集合及其弱引用衍生

    摘要:前言新增了兩種基本的原生數(shù)據(jù)集合和加上和現(xiàn)在共有四種,以及由兩者衍生出的弱引用集合和。其本身是生成實(shí)例數(shù)據(jù)集合的構(gòu)造函數(shù),可以接受一個(gè)數(shù)組或具有接口的數(shù)據(jù)結(jié)構(gòu)作為參數(shù)用來初始化。返回鍵值對(duì)的遍歷器對(duì)象,鍵值對(duì)為鍵名鍵值。 前言 ES6新增了兩種基本的原生數(shù)據(jù)集合:Set和Map(加上Array和Object現(xiàn)在共有四種),以及由兩者衍生出的弱引用集合:WeakSet和WeakMap。從...

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

    摘要:聲明的變量只在其所在的代碼塊內(nèi)有效。只要在聲明之前使用這些變量,就會(huì)報(bào)錯(cuò)。在語法上稱為暫時(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精華:函數(shù)擴(kuò)展

    摘要:在函數(shù)方面的擴(kuò)展比較豐富也很實(shí)用,本篇概括了這中的精華知識(shí)。所以無法成為構(gòu)造函數(shù),不能使用操作符。參數(shù)將擴(kuò)展運(yùn)算符作用于參數(shù),即為參數(shù)。聲明式,直接為函數(shù)名。通過構(gòu)造函數(shù)生成的,為。函數(shù)的屬性,在其描述對(duì)象的屬性上,為函數(shù)名。 ES6在函數(shù)方面的擴(kuò)展比較豐富也很實(shí)用,本篇概括了這中的精華知識(shí)。 1 箭頭函數(shù) 箭頭函數(shù)是ES6中定義函數(shù)的新形式。 新形式不僅簡化了定義方式,更為函數(shù)本身...

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

    摘要:副作用,無副作用可執(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
  • let&amp;const

    摘要:資料參考是阮一峰老師寫的教程命令新增的命令,使用來聲明變量的,就像一樣,但是聲明的變量只在所在的代碼塊中有效。凡是在聲明之前使用這個(gè)變量都會(huì)報(bào)錯(cuò)塊級(jí)作用域中擁有全局作用域和函數(shù)作用域,添加了塊級(jí)作用域。 資料參考是阮一峰老師寫的ES6教程 let&const命令 let ES6新增的let命令,使用來聲明變量的,就像var一樣,但是聲明的變量只在let所在的代碼塊中有效。 e.g { ...

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

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

0條評(píng)論

UnixAgain

|高級(jí)講師

TA的文章

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