預設引數就是當使用者沒有傳值的時候函式內部預設使用的值,在es5中我們通過邏輯運算子||來實現
function fn(a, b)
console.log(fn("hello"))
這樣寫有乙個缺點就是當我傳入乙個空字串的時候,返回的結果並不是我想要的結果,正確的輸出結果應該是:hello,但是因為空字串會被轉換成false, b = '' || "nodeing",所以最終輸出的結果會是「hellonodeing「,因此,我們還需要去判斷b有沒有值
function fn(a, b)
return a + b
}console.log(fn("hello"))
在es6中沒有必要那麼麻煩,可以在函式定義的時候給定預設值
function fn(a, b = "nodeing")
fn(...引數名),這種形式的引數叫做rest引數,作用就是獲取函式多餘的引數,這樣就不需要arguments物件了
function fn(...arg)
}fn(1,3,4,5,6)
使用rest引數和普通引數混用的時候需要注意的是一一對應關係
function fn(a,b,...arg)
fn(1,2,4,5,6)// 1傳給a 2 傳給b, 4、6、6傳給arg,arg是乙個陣列
還應該注意的一點是rest引數必須放在最後
function fn(...arg,a,b){} //錯誤
在es6中,定義函式可以使用箭頭(=>)的形式
let f = n => n*2
這種寫法等價於
let f = function(n)
上面函式只是傳入了乙個引數,如果有多個引數的時候,需要寫成這樣
let f = (a, b) => a + b;
等價於
let f = function(a,b)
如果函式體有多條語句的時候寫成這樣
let f = (a, b) => else
}
如果沒有引數的時候,括號不能省略
let f = () => console.log(1)
f()//f = => console.log(1) 如果寫成這樣會報錯
注意事項:
(1)箭頭函式沒有自己的this,函式體內的this物件,就是定義時所在的物件,而不是使用時所在的物件。
document.onclick = ()=>;
上面**中呼叫後面箭頭函式的是document物件 但是指向的卻是window,因為箭頭函式在window環境下定義的
document.onclick = function () ;
f();
}
上面**中箭頭函式裡的this指向的是document,原因是箭頭函式是在事件處理函式function(){}中呼叫的,在onclick後面的匿名函式function中this是指向document的,所以內層的箭頭函式裡的this和外層函式的this都會指向document
再舉乙個例子:
document.onclick = ()=>;
function fn() , 1000) //document
}// fn()
document.onclick = fn;
上面**中,setinterval中的匿名函式是在外層的fn環境下定義的,外層fn中的this是指向document,所有箭頭函式中的this也指向document
(2)不可以當作建構函式,也就是說,不可以使用new命令,否則會丟擲乙個錯誤。
let f = ()=>{}
let f1 = new f() //報錯
(3)不可以使用arguments物件,該物件在函式體內不存在。如果要用,可以用 rest 引數代替。
let f = ()=>
f() //報錯
(4)不可以使用yield命令,因此箭頭函式不能用作 generator 函式 es6 最佳入門實踐 6
symbol是es6中一種新增加的資料型別,它表示獨一無二的值。es5中我們把資料型別分為基本資料型別 字串 數字 布林 undefined null 和引用資料型別 object 在es6中新增的symbol資料型別劃分到基本資料型別 為什麼會有這樣一種資料型別呢?別人給了你乙個定義好的物件 va...
es6 最佳入門實踐 12
在es5中,物件導向我們通常寫成這樣 function person name,age person.prototype.showname function let p new person xiaoqiang 10 p.showname 上面這種寫法與傳統的物件導向寫法有很大的不同,讓學習過其他物...
es6 最佳入門實踐 10
generator函式是es6提供的一種非同步程式設計解決方案。在它的內部封裝了多個狀態,因此,又可以理解為一種狀態機,執行generator函式後返回乙個迭代器物件,使用這個迭代器物件可以遍歷出generator函式內部的狀態 generator函式和傳統函式的不同點有 1 函式定義的時候,fun...