20javascript6 函数

1闭包函数

概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域

闭包=内层函数+外层函数的变量

作用:封闭数据,提供操作,外部也可以访问函数内部的变量

function outer(){
  let a=10;
  // return 匿名函数
  return function(){
    console.log(a);
  }
}

let fn= outer()

// 闭包其他形式代码
function outer(){
  let a= 10;
  // 新建具名函数
  function inner(){
    console.log(a);
    // 返回具名函数
    return inner
  }
}

2函数参数

2.1动态参数 arguments 是函数内部内置的伪数组变量,它包含了调用函数时传入的所有实参。

arguments是一个伪数组,只存在于函数中

arguments 的作用是动态获取函数的实参

可以通过for循环依次得到传递过来的实参

可以在不定义形参的情况下接收数据

  function getSum() {
      console.log(arguments); //[10,20,30]
      console.log(arguments[1]);20

      let sum = 0;
      for (let i = 0; i < arguments.length; i++) {
        sum += arguments[i];

      }
      console.log(sum);
    }
    
     getSum(10, 20, 30)

2.2剩余参数

1...是语法符号,置于最末函数形参之前,用于获取多余的实参

2借助...获取的剩余实参,是个真数组,

  <script>
// 剩余参数。。。。
// 
// function fn(args){
//   console.log(args);  //只得到一个10

// }
// fn(10,20,30,40)

// 剩余参数...
function fn(...args){
  console.log(args);  //得到一个字符串zhangsan和一个数组[20,30,40]

}
fn('zhangsan',20,30,40) //zhangsan [20,30,40]

// 用于接收所有的实参,接收到一个真数组
// 剩余参数必须放到最后,写在形参前面
function fn(uname,...args){
  console.log(args);  //得到一个数组[20,30,40]
  console.log(uname); //10

}
fn(10,20,30,40)

  </script>

剩余参数容易与展开运算符搞混,

剩余参数:函数参数中使用,得到真数组

展开运算符:数组中使用,数组展开

//用于将数组展开 展开成由逗号分隔的多个值
    let arr=[10,20,30,40]  //...arr
    console.log(...arr);  //10,20,30,40

数组展开的应用1:只要是调用函数实参,是逗号分隔的多个值就可以使用数组展开

 let arr1=[9,10,28,17,32,15]  //...arr 9,10,28,17,32,15
let max = Math.max(...arr)
 console.log(max);

应用2:合并数组

 let arr1=[10,20,30]
 let arr2=['one','two','three']

 let arr3=[...arr1,...arr2]
 console.log(arr3); [10,20,30,'one','two',three]

3箭头函数 

引入箭头函数的目的是更简短的函数写法并且不绑定this,适合于本来需要匿名函数的地方

const fn=()=>{
console.log('箭头函数')
}
fn()

如何简写:1如果函数体只有一行代码,可以写到一行上,并且无需写return

                  2如果只有一个参数,可以省略小括号

                  3加括号的函数体返回对象字面量表达式

const fn1 = uname=>({uname:uname})
console.log(fn1('箭头函数'));    //{uname: "箭头函数"}

箭头函数的参数

1普通函数有arguments动态参数

2箭头函数没有arguments动态参数,但是有剩余参数...args

<script>
    // 箭头函数没有arguments
    let fn = (...args) => {
      console.log(args);
    }
    fn(10,20,30)

箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this,既它的this要找上一层作用域的this指向。事件回调函数使用箭头函数,this的全局是window


    console.log(this);//window
    let obj={
      say:function(){
        console.log(this);//obj调用方法对象say:,这时this指obj
      },
      fn:()=>{  //上一级作用域是window
        console.log(this);
      }
    }

    obj.say()//object

    obj.fn()//window
    // 箭头函数也是函数,与普通函数差别
    // 没有arguments,使用剩余参数代替
    // 没有this,触发链式查找
  </script>

4解构赋值与箭头函数相结合

解构赋值是一种快速为变量赋值的简介语法,本质上仍然是为变量赋值。

分为数组解构和对象解构

数组解构:基本语法

1赋值运算符=左侧的[]用于批量声明变量,右侧数组的单元值将被赋值给左侧的变量

2变量的顺序对应数组单元制的位置依次进行赋值操作

const[a,b,c,d]=[1,2,3]
console.log(a)//1
console.log(b)//2
console.log(c)//3
console.log(d)//undefined


如果变量少,单元值多,可以用剩余参数来解决,多的单元值将组成一个数组
const[a,b...c]=[1,2,3,4]
console.log(a)//1
console.log(b)//2
console.log(c)//[3,4]

 防止有undefined传递单元值的情况,可以设置默认值:

const[a='手机',b='华为']=['小米']
console.log(a);//小米
console.log(b);//华为

 允许初始化变量的默认值,且只有单元值为undefined时默认值才会生效

let a=1;
let b=3;
[b,a]=[a,b]
console.log(a)//3
console.log(b)//1
const[a,b]=['苹果',['小米','华为']]
console.log(a);//苹果
console.log(b);//['小米','华为']

// const[a,[b,c]]=['苹果',['小米','华为']]
// console.log(a);//苹果
// console.log(b);//小米
// console.log(c);//华为

对象解构:将对象属性和方法快速批量赋值给一系列变量的简介语法

  // 语法:let {变量,变量,。。。}=对象
    // 注意:变量名,默认要与,对象的属相同,如果不存在就是undefined
  

基本语法:

1赋值运算符=左侧的{}用于批量声明变量,右侧对象的属性值将被赋值给左侧的变量

2对象属性的值将被赋值给与属性名相同的变量

3注意解构的变量名不要和外面的变量名冲突否则报错

4对象中找不到与变量名一致的属性时变量值为undefined

const user={
  name:'小明',
  age:18
}
const{name,age}=user
console.log(name);
console.log(age);
// 多级对象解构
    let arr2 = [{
      uname: 'zhangsan', 
      age: 20,
      car: {
        price: '50w',
        color: 'red'
      }
      , phone: {
        price: '1w',
        color: 'blue'
      }
   
//                      原名:新名 这里的color:c 是从对象中提取变量并同时修改新的变量名
    let [{ uname, age,  car: { color, price }, phone: { color: c, price: p } }] = arr2
    console.log(uname, age, color, price, c, p);  //
  </script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值