-
默認參數
function add(num1,num2 = 0,callback = function(){}){ // es6 默認參數 num1 = (typeof num1 === 'number') ? num1 : 0; // es5默認參數 num2 = (typeof num2 === 'number') ? num2 : 0; // es5默認參數 callback(); return num1 + num2; }
-
默認參數與arguments
function add(num1,num2 = 0){ console.log(num1 === arguments[0]);//true console.log(num2 === arguments[1]);//true num1 = 2; num2 = 2; console.log(num1 === arguments[0]);// ? console.log(num2 === arguments[1]);// ? return num1 + num2; }
es5非嚴格模式,爲true,參數重新賦值會導致arguments改變;嚴格模式以及es6,都爲false,arguments不跟隨變化。
-
不定參數 function(…values);function(…values,value)//error。
-
Function 構造函數,接收字符串創建函數,接收參數和函數體。es6的函數構造函數增加了不定參數,默認參數的函數的構造。
-
展開運算符 …values。可將數組展開。
var obj = {}; function func(v1,v2,v3){}; var arr = [1,2,3]; func.call(obj,...values); func.apply(obj,values);
-
new.taget 判斷函數是否以new 進行調用。如果不爲undefined,則證明函數是以構造函數的形式進行調用的。
-
箭頭函數。箭頭函數的arguments,this,new.target都由最近一層非箭頭函數(執行環境)決定,保持一致並不可更改。
function Car(){ this.move = function(){ console.log('123123') } this.onStart = function(){ document.addEventListener('click',function(e){this.move()});//move is undefine document.addEventListener('click',(e)=>{this.move()});//ok } } var car = new Car(); car.onStart();
function(e){this.move()}由document對象進行調用,所以this指向document,但是document沒有move方法,所以會報錯。採用箭頭函數的寫法,this會綁定到onstart的this,就是car對象,代碼可正常執行。箭頭函數的this是不會被改變的,也就是call,bind,apply並不能改變箭頭函數的this指向。
-
尾調用優化
function factorialBetter(n,result=1){ if(n<=1){ return 1*result; }else{ result = n*result; return factorialBetter(n-1,result); } } // 尾遞歸 function factorialBetter(n,result=1){ if(n<=1){ return 1*result; }else{ result = n*result; return factorialBetter(n-1,result); } }
尾遞歸滿足條件:
- 尾遞歸不是一個閉包,沒有訪問外部作用域的變量。
- 尾調用是最後一條語句。
- 尾調用作爲結果返回。
es6函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.