一、函數的 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;