ES6学习————(三)

函数参数的默认值

  参数的默认值默认声明,不能用let或const声明和参数同名的变量或常量

		function fn(x = 520) {
  			let x = 20; 		// 报错
  			const x = 50; 		// 报错
		}

  定义了默认值的参数应该作为尾参数

		function fn(x = 1, y) {
 			 return [x, y];
		}
		fn() // [1, undefined]
		fn(2) // [2, undefined]
		fn(, 1) // 报错
		fn(undefined, 1) // [1, 1]


		function fn(x, y = 4, z) {
  			return [x, y, z];
		}
		fn() // [undefined, 4, undefined]
		fn(3) // [3, 4, undefined]
		fn(2, ,2) // 报错
		fn(5, undefined, 2) // [5, 4, 2]

  参数传入undefined将触发默认值,null则没有这个效果

		function fn(x = 6, y = 9) {
  			console.log(x, y);
		}
		fn(undefined, null)		// 6 null

  函数有一个length属性,返回没有设置默认值的参数的个数
  默认值的参数不是尾参数,则不计入后面的参数

		(function (x) {}).length // 1
		(function (y = 6) {}).length // 0
		(function (x, y, z = 6) {}).length // 2


		(function (xx = 2, yy, zz) {}).length // 0
		(function (xx, yy = 4, zz) {}).length // 1

rest参数

  rest参数只能放在最后面

        function f1(...a){
            console.log(arguments);			//类数组
            console.log(a);					//数组[1,21,13,4,5]
        }
        f1(1,21,13,4,5);

  rest参数让数组排列更简单

		// 从小到大排列
		function f1(b,...a){
			a = a.sort(function(x,y){
                return x-y
            })
            console.log(a);
            
        }
        f1(1,21,13,4,5);

  函数的length属性,不包括 rest 参数

		(function(...x) {}).length		// 0
		(function(y, ...z) {}).length	// 1

严格模式

  除了正常的运行模式之外,ES6添加了第二种运行模式:严格模式
  严格模式就是让JS代码在更严格的条件运行

  严格模式的作用

    	1.消除了js代码中一些不合理、不严谨之处,减少了一些怪异行为
   	 	2.消除了代码运行的一些不安全之处,保证代码的安全执行
    	3.提高编译效率,增加运行速度

  开启严格模式的方式

		第一种	在全局第一行
       		"use strict"

		第二种	在函数体的第一行
        	function f1(){
           		 "use strict"
        	}

  严格模式下常见的变化
    1. 严格模式禁止没有声明就赋值变量的情况

         a = 1;
         console.log(a);				//报错,a没有定义

    2. 严禁删除已声明的变量

        let b = 123;
        console.log(delete b);			//报错,在严格模式下删除非限定标识符

    3. 严格模式下,全局中普通函数的调用this指向undefined

        function f2(){
            console.log(this);			//undefined
        }
        f2();

    4. 构造函数只能使用new调用(普通调用this指向undefined)

        function f3(){
            this.name = "xiaoming";
            this.age = 18
        }

        let F = new f3();
        console.log(F);

        //f3();		//f3中this指向undefined

    5. 定时器中回调函数的this仍旧指向window

        setTimeout(function(){
            console.log(this);			//window{}
        },500);

    6. 严格模式下,函数中不允许有重名的参数

        function f4(a,a){
            console.log(a+a);			//报错,不允许重复参数名称
        }
        f4(1,2)

name属性

  函数中有一个默认属性name,保存的是函数名 是一个只读属性,修改无效

    	function foo(){
    	}
    	console.log(foo);				//foo(){}
    	foo.name = "fun";
    	console.log(foo.name);			//foo


    	let f1 = function (){}
    	console.log(f1.name);			//f1

箭头函数

  箭头函数的作用:简化代码
          回调函数大部分情况会选择使用箭头函数

  1. 箭头函数简写
     当有且只有一个参数,箭头函数的()可省
     函数体内有且只有一句语句,{}可省 如果这个语句是返回语句 return可省

        let f2 = a =>console.log(111);

        //let f2 = (a)=>{return 111}
        let f2 = a => 111;
        
        // 如果返回值是一个对象
        // let f2 = a => {return {x:1}};
        let f2 = a => ({ x: 1 });

  2. 箭头函数中没有arguments,可以用rest参数替代arguments

  3. 关于箭头函数this的指向
    箭头函数内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
    不可以当作构造函数使用new命令,会抛出一个错误。
    巧记:如果要找箭头函数中的this,找离它最近的function的this

递归

  递归:函数的内部自己调用自己
    递归很容易出现"栈溢出",所以递归必须加退出条件

        	let i = 0;
       		function f1(){
        		i++;
        		if(i==3){
            		return;
        		}
            	f1();
       		}
       		f1();

  求阶乘

			//  n*(n-1)*(n-2)*...*2*1
    		function fj(n){
        		if(n == 1){
            		return 1;
        		}
        		// 24
        		return n*fj(n-1);
    		}

    		console.log(fj(4));


  斐波那契数列

    		// 1、1、2、3、5、8、13、21、34
    		function ff(n){
        		if(n==1 || n == 2){
            		return 1;
        		}
        		return ff(n-1)+ff(n-2);
    		}
    		console.log(ff(3));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值