zoukankan      html  css  js  c++  java
  • ES6温习

    1、函数中的参数可以赋默认值

      ES6 中可以为函数设置默认值。有几点需要:

    • 在函数默认声明的形参,在函数里面不可以再用let、const进行重新声明。
    • 参数中形参不能重名
    • 函数每次被调用,函数的默认值都会重新计算。
    function hunterTest(x = 1, y = 2) {
    	return x+y;
    }
    // 正常默认值
    hunterTest();    // 3
    // 传入参数
    hunterTest(4, 6);    // 10
    
    // 形式参数不允许重名
    function hunterTest(x, x = 1, y = 2) {  // SyntaxError: Duplicate parameter name not allowed in this context
    	return x+y;
    }
    
    // 函数中不允许使用 let、const 定义和形参同名的变量
    function hunterTest(x = 1, y = 2) { SyntaxError: Identifier 'y' has already been declared
        let x = 12; 
        const y = 34;
        return x+y;
    }
    
    // 形参 惰性计算
    let x = 1;
    function hunterTest(z = x + 10) {
        return x+z;
    }
    hunterTest();    // 12
    
    let x = 5;
    hunterTest();    // 20
    

      

    2、结构赋值

      函数的参数可以使用对象的解构赋值来对形参赋值

    function test({x = 1, y}) {
    	console.log(x+" "+y);
    }
    
    test({x:4, y:5});        // 4 5
    

      形参的类型是一个对象类型,所以当我们调用函数的时候不传入参数,则会报错。

      因此需要为函数的参数设置默认值。

    function hunterTest({x = 1, y}) {
    	console.log(x+" "+y);
    }
    hunterTest();       // TypeError: Cannot read property 'x' of undefined
    
    function hunterTest({x = 1, y} = {}) {
    	console.log(x+" "+y);
    }
    hunterTest();       // 1 undefined
    

      

    3、作用域

      形参在被定义默认值之后,参数将会形成独立的作用域。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的。

    x = 123
    function hunterTest(x = 1, y) {
    	console.log(x+" "+y);
    }
    
    hunterTest();     // 1 undefined
    

      

    4、Rest 参数

      用(...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

    function test(... args) {
    	for (let val of args) {
        console.log(val);
      }
    }
    
    test(1,3,5,7,8)
    1
    3
    5
    7
    8
    

      

    function test(a, ... args) {
      console.log("First parameter: "+a);
      for (let val of args) {
        console.log(val);
      }
    }
    
    test(1,3,5,7,8);
    First parameter: 1
    3
    5
    7
    8
    

    4、箭头函数

      使用 "=>" 来定义函数。

    var a = (x, y) => {
        return x + y;
    }
    
    a(3,5);      // 3 5
    

      

      若箭头函数 不需要参数 或者 需要多个参数,则使用圆括号"()"来代表参数部分。

      箭头函数的代码块部分只有一句的话,可以不用 "{}" 包裹。不需要 return。

    var a = x => x;
    
    a(3);           // 3
    

      

      箭头函数通过 "=>" 后面的 "{}"来分辨代码块的。

      正常函数 转换成 箭头函数

    // 正常函数
    function test(a, ... args) {
      console.log(a);
      for (let val of args) {
        console.log(val);
      }
    }
    
    // 箭头函数
    var test = (a, ...args) => {
        console.log(a);
        for (let val of args) {
          console.log(val);
        }
    }
    

      

      箭头函数与正常函数的区别

    1. 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
    2. 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
    3. 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。

      箭头函数没有自己的this,无法实例,因此它不能做为构造函数。

      他的this指向的是它的上一层对象的this,如果上一层也没有的话就再往上指,直到指向到有自己this的函数为止,并作为自己的this。这样就可以不使用 var that = this 了

          箭头函数没有自己的 bind()、call()、 apply()。

      apply、call、bind 函数也是可以改变 this 的指向的

      apply :
        
    fun.apply(thisArg, [argsArray]),apply() 方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数

       call :

        fun.call(thisArg[, arg1[, arg2[, ...]]]) , applycall 基本类似,他们的区别只是传入的参数不同。call 方法接受的是若干个参数列表。

           bind :

        fun.call(thisArg[, arg1[, arg2[, ...]]])() 是创建一个新的函数,我们必须要手动去调用。

    var a = {
        name: "QQQ",
        fn: function(a, b) {
            console.log(a+b);
        }
    }
    
    // apply
    var b = a.fn;
    b.apply(a, [5,7])    // 12
    
    // call
    b.call(a, 5, 7)        // 12
    
    // bind
    b.bind(a,5,7)()       // 12
  • 相关阅读:
    凌乱的DSP笔记(6)-直流电机&步进电机
    凌乱的DSP笔记(5)-按键
    凌乱的DSP笔记(4)-继电器
    凌乱的DSP笔记(3)-蜂鸣器播放音乐
    凌乱的DSP笔记(2)-LED流水灯
    凌乱的DSP笔记(1)-F28335基础知识
    Python GUI设计——tkinter菜鸟编程(上)
    Python基础知识
    R|Shiny练习
    R之ggvis学习笔记
  • 原文地址:https://www.cnblogs.com/Lyh1997/p/12753862.html
Copyright © 2011-2022 走看看