ES6彙總(一)

let & const

  1. var 是函數/全局作用域,可重複賦值(可能會覆蓋其他人聲明的變量);let 和 const 都是塊級作用域,且在同一作用域中不可重新聲明。
  2. let 可重新賦值,const不可重新賦值(constant),如果是引用對象,其內部值可以改變;可用object.freeze(x)凍結對象。
  3. 之前將 var 聲明的變量寫入IIFE使該變量私有化,防止其污染全局變量;現在可用 let 代替 IIFE,直接寫在{ }中即可,以及用let 解決 for 循環中的問題。
  4. 暫時性死區是指不能再變量初始化之前使用變量,注意x is not defined(屬於Uncaught ReferenceError報錯) & undefined,區分變量的創建、初始化和賦值。

箭頭函數

  1. 箭頭函數只有一個參數時可以不加括號;去掉大括號,把函數體寫在一行,可隱式返回;箭頭函數是匿名函數,可賦值給變量名,在遞歸或者解除事件綁定時有用。
  2. (單獨的)函數在調用時,例如setTimeout()中的函數,如果不是作爲對象的方法或者被bind、call 和 apply 改變 this 值,則該函數中的 this 指向是window,嚴格模式中是 undefined。
  3. 函數中的 this 是在函數運行時動態指定的;箭頭函數 this 值是詞法作用域,在定義時就規定了的,在調用時也不會被改變。
  4. 參數默認值的寫法:
//舊版寫法
function add(a,b) {
	a = a || 5;  //默認聲明參數變量,無需再聲明
	b = b || 2;
	return a + b;
}
//es6寫法
function add(a=5,b=2) {
	return a + b;
}
//只傳入後一個值時的寫法
add(undefined,5);    //10
  1. 箭頭函數不適用的場景:
  • 構造函數,創建新對象的四個步驟中,箭頭函數並不能把 this 值綁定到新生成的對象上
  • 需要用this,注意can’t read property ‘xxx’ of undefined
  • 需要獲取函數參數,使用argument對象
// 1構造函數不要使用
const Person = (name,age) => {  
	this.name = name;
	this.age = age;
}
var pascal = new Person = ('Pascal',22);
Person.prototype.upAge = () => {
    console.log(this)
    this.age++;
    console.log(this.age)
}
//2事件回調不要使用
const button = document.querySelector('.zoom');
//可以理解爲不綁定就指向外層(window)
var x = '而此時恰恰需要把回調函數中的this綁定爲button '
button.addEventListener('click',function() {
   this.classList.add('in');
   setTimeout(() => {
   	this.classList.remove('in')
   },2000)
})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章