你真的懂let和const?

  1. 塊級作用域

在ES6之前我們腦海裡應該只存在全局作用域和函數級作用域,沒有塊級作用域。那麼為什麼要引入塊級作用域呢?

  • 避免外層變量被覆蓋

var str = "hello"; function d() { console.log(str); if (false) { var str = 'world'; } } d();//undefined
var str = "hello"; function d() { var str ; console.log(str); if (false) { str = 'world'; } } d();//undefined
  • 循環變量汙染全局變量

var str = 'hello'; for (var i = 0; i < str.length; i++) { console.log(str[i]); } console.log(i); // 5

很多同學面試的時候可能會遇到上面類似的代碼,疑惑點應該在為什麼會打印出來為什麼會是5,同樣的道理代碼如同下方。變量會被提升,所以在循環結束之後i就被累加到了5.

var str = 'hello'; var i; for ( i = 0; i < str.length; i++) { console.log(str[i]); } console.log(i); // 5

這個答案應該很明顯了吧

var str = "hello"; function d() { console.log(str); if (false) { let str = 'world'; } } d();
  1. 暫時性死區MDN

if (true) { tmp = 'abc'; // ReferenceError console.log(tmp); // ReferenceError let tmp; console.log(tmp); // undefined tmp = 123; console.log(tmp); // 123 }
function de(){ var a = "1"; var a = "2"; console.log(a); } de()//不報錯 function de(){ var a = "1"; let a = "2"; console.log(a); } de()//報錯 function de(){ let a = "1"; let a = "2"; console.log(a); } de()//報錯
  1. const常量

//實例一 const a = "hello"; console.log(a);//"hello" a = "world";//Assignment to constant variable //實例二 const obj = {}; obj.name = "jack"; console.log(obj.name);//"jack" obj = {};//Assignment to constant variable. //實例三 const a = []; a.push('Hello'); console.log(a); //[ 'Hello' ] a.length = 0; a = ['Dave']; // Assignment to constant variable.
  • 關於es6還有更多的知識點,請關注我接下來的

鏈接:https://juejin.im/post/5aab182c518825558c472b1f

你真的懂let和const?


分享到:


相關文章: