由一道面試題引起的思考~~如何用es5實現es6中相似const的效果?es6
var:有變量提高,提高到當前做用域的最前面試
let:
(1)let不會有變量提高:且let申明的變量在塊級做用域中存在暫時性死區 (暫時性死區:在塊級做用域中,從塊級的頂部到變量申明以前,這一區域是不容許使用該變量的,不然報錯,即便是typeof)
(2)全局變量再也不屬於window對象:在全局let聲明的變量再也不屬於頂層對象(window)
即 let a=1;console.log(window.a)//undefined
(3)let變量不能重複聲明,不管是var let 或let let 或let var 都不行的呀~~this
const: 聲明一個常量,且聲明時必須賦值,const特性同let,並且這個常量是不能改變的
注意:若是const常量對應的是一個對象,則不能對常量從新賦值,可是能夠改變這個對象的屬性~~es5
例1:const a=1;a=2;//報錯 例2:consot aa={};aa=2;//報錯 例3:const aaa={};aaa.b=1;//不報錯
面試題:用es5實現相似const效果。我認爲這樣是可行的: 主要是經過defineProperty設置變量的可寫屬性爲false
'use strict'; Object.defineProperty(this,'x',{value:1,writeable:false});
this.x=1; //報錯
console.log(x);code
'use strict';
Object.defineProperty(this,'x',{value:{},writeable:false});
this.x.a=1; //不報錯
console.log(x); //{a:1}對象
經過以上兩個例子發現這種實現應該是能夠的~~作用域