ES6函數擴展

一、函數的 length 屬性數組

ES6 容許爲函數的參數設置默認值,即直接寫在參數定義的後面。函數

function test(x, y = 'World') {
    console.log(x, y);
}

注意:函數的length屬性,將返回沒有指定默認值的參數個數。若是遇到有默認值的參數 就中止this

function test(x, m,y = 'World',z,f) {
    ...
}
console.log(test.length)    // 2  遇到默認參數則中止 因此爲2

二、rest參數spa

ES6引入rest參數,用於獲取函數的多餘參數,這樣就不須要使用arguments對象了。rest參數搭配的變量是一個數組,該變量將多餘的參數放入數組中;rest

...values 就是 rest 參數的表現形式
function add(...values) {
    console.log(values);
}
add(2, 5, 3) 

三、箭頭函數code

ES6 中容許使用「箭頭」(=>)聲明函數對象

基本用法:blog

let fun = val=>val; //一個參數val並返回一個val
// 等價於
function fun(val){
    return val;  
}

注意:io

若是箭頭函數不須要參數或須要多個參數,就使用一個圓括號表明參數部分;console

若是箭頭函數的代碼塊部分多於一條語句,就要使用大括號將它們括起來,而且 使用return語句返回。

let fun = (name,age)=>{
    console.log('姓名'+name);
    console.log('年齡'+age);
}

箭頭函數有內部屬性arguments,但不保存實參

四、箭頭函數的 this 指向

箭頭函數裏面沒有本身的this,天然而然也就不能做爲構造函數,箭頭函數是引用外層的this。在箭頭函數中 this 指向是固定的。

箭頭函數致使this老是指向函數定義生效時所在的對象中的this;

function foo() { 
    setTimeout(() => { console.log(this); }, 100); 
} 
foo()   // global 對象 ,由於箭頭函數沒有本身的this,foo函數的this就是箭頭函數this的指向。foo中this指向是global 因此 箭頭函數中的this也是指向global(即外層this)

eg:

function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}
var id = 21;
foo.call({ id: 42 }); // 更改foo中this指向對象{id:42} 因此打印結果爲42;
相關文章
相關標籤/搜索