首頁 > php教程 > PHP开发 > 主體

深入淺出ES6之let和const指令

高洛峰
發布: 2016-12-29 13:20:21
原創
1186 人瀏覽過

let和const宣告的變數只在程式碼區塊內有效

{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
登入後複製

   

不存在變數提升

變數一定要在宣告後使用,否則訊息

塊級作用域

var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
登入後複製

   

const命令

聲明一個只讀的常量,一旦聲明,一旦被保留下來以後賦值

let指令、const指令、class指令宣告的全域變量,不屬於全域物件的屬性

// 报错
function () {
let a = 10;
var a = 1;
}
登入後複製

   


下面再單獨向大家介紹給大家。 js總是沒有常數的概念,es6則彌補了這個缺陷;

function f() { console.log('I am outside!'); }
(function () {
if(false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
}
f();
}());
//I am inside! ES5 函数提升
//I am outside! ES6 块级作用域
登入後複製

   

上例聲明了一個基本類型的常數,如過試圖修改初始值則會報錯;如果是引用類型的值同樣適用,但有一點要注意,舉例:

var a = 1;
// 如果在Node的REPL环境,可以写成global.a
// 或者采用通用方法,写成this.a
window.a // 1
let b = 1;
window.b // undefined
登入後複製

   

正常報錯,沒毛病,再看:

const foo='foo';
foo='bar';//TypeError: Assignment to constant variable.
登入後複製

   

這怎麼報錯?而且還能修改成功? 這兩個例子不一樣的地方在於前者是修改了指針(需熟悉js 引用類型)對應的內容改變了,後者則不是指向依然沒變但是指向對象的內容發生改變了,對於foo而言我只是一個指標負責指向對應的物件至於物件內容是什麼就不管我的事了所以可以修改;如果不想讓內容也改變也行使用另一個方法;

const foo=[];  
foo=[1];//Assignment to constant variable.
登入後複製
   

這樣就不用擔心被修改了;

更多深入淺出ES6之let和const指令相關文章請關注PHP中文網!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板