es6函数

  1. 默认参数

    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;
    }
    
  2. 默认参数与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不跟随变化。

  3. 不定参数 function(…values);function(…values,value)//error。

  4. Function 构造函数,接收字符串创建函数,接收参数和函数体。es6的函数构造函数增加了不定参数,默认参数的函数的构造。

  5. 展开运算符 …values。可将数组展开。

    var obj = {};
    function func(v1,v2,v3){};
    var arr = [1,2,3];
    func.call(obj,...values);
    func.apply(obj,values);
    
  6. new.taget 判断函数是否以new 进行调用。如果不为undefined,则证明函数是以构造函数的形式进行调用的。

  7. 箭头函数。箭头函数的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指向。

  8. 尾调用优化

    	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);
    	    }
    	}
    

    尾递归满足条件:
    - 尾递归不是一个闭包,没有访问外部作用域的变量。
    - 尾调用是最后一条语句。
    - 尾调用作为结果返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值