let和const區別
var定義的變量,沒有塊的概念,可以跨塊訪問, 不能跨函數訪問。
let定義的變量,只能在塊作用域裏訪問,不能跨塊訪問,也不能跨函數訪問,值可變可以修改。
const用來定義常量,使用時必須初始化(即必須賦值),只能在塊作用域裏訪問,值不可變不能修改。
<script type="text/javascript">
// 塊作用域
{
var a = 1;
let b = 2;
const c = 3;
// c = 4; // 報錯
var aa;
let bb;
// const cc; // 報錯
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
console.log(aa); // undefined
console.log(bb); // undefined
}
console.log(a); // 1
// console.log(b); // 報錯
// console.log(c); // 報錯
// 函數作用域
(function A() {
var d = 5;
let e = 6;
const f = 7;
console.log(d); // 5
console.log(e); // 6
console.log(f); // 7
})();
// console.log(d); // 報錯
// console.log(e); // 報錯
// console.log(f); // 報錯
</script>
const定義的對象屬性是否可以改變?
const person = {
name : 'Tom',
sex : '男'
}
person.name = 'test'
console.log(person.name) // test
既然const定義的對象屬性不能改變,上述的person.name爲何能改變name的值ne ?
上述代碼name被修改,因爲對象是引用類型的,person中保存的僅是對象的指針。
這就意味着,const僅保證指針不發生改變,修改對象的屬性不會改變對象的指針,所以是被允許的。
如果我們試着修改一下指針,讓person指向一個新對象,會報錯。
const person = {
name : 'Tom',
sex : '男'
}
person = {
name : 'test',
sex : '男'
}
Promise對象
Promise本身是一個構造函數,提供了resolve和reject兩個方法。異步操作成功就調用resolve方法,將Promise實例對象狀態改爲resolved;失敗就調用reject方法將Promise實例狀態改成rejected。
function timeout(duration = 0) {
return new Promise((resolve, reject) => {
setTimeout(resolve, duration);
})
}
module
ES6最重大的語法變化就是引入了模塊(module),一個模塊的內部使用export命令輸出對外的接口
// lib/math.js
export function sum(x, y) {
return x + y;
}
// 使用接口
import {sum} from "lib/math";
console.log(sum(1,2));
參考:
[Antdesign 實戰教程——你需要了解的ES6](https://www.yuque.com/ant-design/course/byllph)
[阮一峯——ES6 入門教程](https://es6.ruanyifeng.com/#README)