ES6基礎入門之let、const
- 2019 年 11 月 21 日
- 筆記

file
作者 | Jeskson 來源 | 達達前端小酒館
01
首先呢?歡迎大家來學習ES6入門基礎let,const的基礎知識內容。初始ECMA Script6。
ESMAScript與JavaScript的關係:
ES是JS的標準(ES是對ECMAScript的縮寫) JS是ES的實現

file

file
ESMAScript的部分歷史:
1998-06 ES2發布,1999-12 ES3發布,成為js的通行標準
2007-10 ES4草案發布
2008-07 將ES4小部分內容提取,發布為ES3.1
2009-12 ES5發布
學習let和const關鍵字,塊級作用域
let與塊級作用域
變數聲明:var,直接使用
window.kk === kk // true
<script type="text/javascript"> var age = 11; console.log(window.age); </script>
let與var的主要區別
let聲明的變數只在當前塊級作用域內有效,let聲明的變數不能被重複聲明,不存在變數的提升。
02
ES6之前的作用域
全局作用域 函數作用域 eval作用域
塊級作用域
就是一對花括弧的區域
{...} if() {} switch() {} for() {} try {} catch (err) {} {}
塊級作用域可以嵌套
{ { } }
代表對象,不是塊級作用域:
var da = { name: dada, }
let只作用在當前塊級作用域內
{ var a = 1; let b = 2; } console.log(a); console.log(b);
{ // 1 let a = 1; { console.log(a); // 1 let b = 2; } console.log(b); // 錯誤 }
for(let i = o; i<3; i++) { }; console.log(i);
使用let或者const聲明的變數,不能在被重新賦值
let不存在變數提升
console.log(da); var da = 'dada'; console.log(dada); let dada = 'dada';
暫時性死區
var da = '1'; { console.log(da); var da = '2'; } console.log(da);
let da = '1'; { console.log(da); let da = '2'; } console.log(da);
03
面試題:
生成10個按鈕,點擊彈出1-10:
var i=0; for(i=1; i<=10; i++){ (function(i) { var btn = document.createElement('button'); btn.innerText = i; btn.onclick = function() { alert(i) }; document.body.appendChild(btn); })(i); }
for(let i = 1; i<=10; i++) { var btn = document.createElement('button'); btn.innerText = i; btn.onclick = function() { alert(i); }; document.body.appendChild(btn); }
const常量,不可改變的量
常量是必須要賦值的,否則報錯
與let相似
不能重複聲明,不存在變數提升,只在當前塊級作用域內有效
常量是不可改變的?

file
一旦聲明常量,就不能再改變?
常量為引用類型的時候,不能保證不可變
解決引用類型,不可保證不可變
const只能保證地址的指向不改變,但是不能保證地址上的值不能改變

file
怎麼去防止常量去引用類型的時候能被修改的情況
Object.freeze(); // 凍結

file
es6之前聲明常量
var Da = '123'; Object.defineProperty();

file

file

file

file

file
Object.seal(); // 防止對象被擴展

file

file

file

file

file
hasOwnProperty()自身的屬性

file

file
seal(),defineProperty(),hasOwnperty(),freeze()。
Object.freeze() 方法可以凍結一個對象。
一個被凍結的對象再也不能被修改;凍結了一個對象則不能向這個對象添加新的屬性,不能刪除已有屬性,不能修改該對象已有屬性的可枚舉性、可配置性、可寫性,以及不能修改已有屬性的值。freeze() 返回和傳入的參數相同的對象。
const obj = { prop: 42 }; Object.freeze(obj); obj.prop = 33; // Throws an error in strict mode console.log(obj.prop); // expected output: 42
hasOwnPreperty()剔除原型鏈上的屬性,如果是true,說明不是原型的屬性
Object.defineProperty() 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性, 並返回這個對象。
obj 要在其上定義屬性的對象。 prop 要定義或修改的屬性的名稱。 descriptor 將被定義或修改的屬性描述符。
Object.seal()方法封閉一個對象,阻止添加新屬性並將所有現有屬性標記為不可配置。
const object1 = { property1: 42 }; Object.seal(object1); object1.property1 = 33; console.log(object1.property1); // expected output: 33 delete object1.property1; // cannot delete when sealed console.log(object1.property1); // expected output: 33
推薦閱讀
1、你知道多少this,new,bind,call,apply?那我告訴你
2、為什麼學習JavaScript設計模式,因為它是核心
3、一篇文章把你帶入到JavaScript中的閉包與高級函數
4、大廠HR面試ES6中的深入淺出面試題知識點
5、一篇JavaScript技術棧帶你了解繼承和原型鏈
關於目前文章內容即涉及前端,PHP知識點,如果有興趣即可關注,很榮幸,能被您發現,真是慧眼識英!也感謝您的關注,在未來的日子裡,希望能夠一直默默的支援我,我也會努力寫出更多優秀的作品。我們一起成長,從零基礎學編程,將 Web前端領域、數據結構與演算法、網路原理等通俗易懂的呈現給小夥伴。分享 Web 前端相關的技術文章、工具資源、精選課程、熱點資訊。
若本號內容有做得不到位的地方(比如:涉及版權或其他問題),請及時聯繫我們進行整改即可,會在第一時間進行處理。
請點贊!因為你們的贊同/鼓勵是我寫作的最大動力!
歡迎關注達達的CSDN!
這是一個有品質,有態度的部落格
7d927f18ebd05ea1d505a572393fbc87.jpg